Tìm kiếm siêu tham số cho LSTM-RNN bằng Keras (Python)


18

Từ Hướng dẫn RNN của Keras: "RNNs rất khó. Lựa chọn kích thước lô là quan trọng, lựa chọn mất và tối ưu hóa là rất quan trọng, v.v. Một số cấu hình sẽ không hội tụ."

Vì vậy, đây là câu hỏi chung hơn về việc điều chỉnh các siêu đường kính của LSTM-RNN trên Keras. Tôi muốn biết về cách tiếp cận để tìm các tham số tốt nhất cho RNN của bạn.

Tôi đã bắt đầu với ví dụ IMDB trên Github của Keras .

mô hình chính trông như thế này:

(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=max_features,
                                                      test_split=0.2)

max_features = 20000
maxlen = 100  # cut texts after this number of words (among top max_features most common words)
batch_size = 32

model = Sequential()
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128))  
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

print("Train...")
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=3,
      validation_data=(X_test, y_test), show_accuracy=True)
score, acc = model.evaluate(X_test, y_test,
                        batch_size=batch_size,
                        show_accuracy=True)

print('Test accuracy:', acc)
Test accuracy:81.54321846

81,5 là một số điểm công bằng và quan trọng hơn nó có nghĩa là mô hình, mặc dù không được tối ưu hóa hoàn toàn, nó vẫn hoạt động.

Dữ liệu của tôi là Chuỗi thời gian và nhiệm vụ là dự đoán nhị phân, giống như ví dụ. Và bây giờ vấn đề của tôi trông như thế này:

#Training Data
train = genfromtxt(os.getcwd() + "/Data/trainMatrix.csv", delimiter=',', skip_header=1)
validation = genfromtxt(os.getcwd() + "/Data/validationMatrix.csv", delimiter=',', skip_header=1)

#Targets
miniTrainTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/trainTarget.csv", delimiter=',', skip_header=1)]
validationTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/validationTarget.csv", delimiter=',', skip_header=1)]

#LSTM
model = Sequential()
model.add(Embedding(train.shape[0], 64, input_length=train.shape[1]))
model.add(LSTM(64)) 
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

model.fit(train, miniTrainTargets, batch_size=batch_size, nb_epoch=5,
      validation_data=(validation, validationTargets), show_accuracy=True)
valid_preds = model.predict_proba(validation, verbose=0)
roc = metrics.roc_auc_score(validationTargets, valid_preds)
print("ROC:", roc)
ROC:0.5006526

Mô hình về cơ bản giống như IMDB. Mặc dù kết quả có nghĩa là nó không học được gì. Tuy nhiên, khi tôi sử dụng MLP-NN vani, tôi không gặp vấn đề tương tự, mô hình học và điểm số tăng lên. Tôi đã cố gắng tăng số lượng kỷ nguyên và tăng - giảm số lượng đơn vị LTSM nhưng điểm số sẽ không tăng.

Vì vậy, tôi muốn biết một cách tiếp cận tiêu chuẩn để điều chỉnh mạng vì về lý thuyết, thuật toán sẽ hoạt động tốt hơn so với mạng perceptron đa lớp đặc biệt cho dữ liệu chuỗi thời gian này.


1
Bạn có bao nhiêu dữ liệu Độ dài của trình tự của bạn là gì? LSTM chỉ thực sự hữu ích cho các vấn đề với nhiều dữ liệu và phụ thuộc dài hạn.
cướp biển

Tìm kiếm ngẫu nhiên hoặc tối ưu hóa Bayes là những cách tiêu chuẩn để tìm siêu âm :)
cướp biển

1
Bạn có chắc bạn cần lớp nhúng? Nhiều bộ dữ liệu chuỗi thời gian sẽ không cần nó.
cướp biển

Tôi có gần 100 nghìn điểm dữ liệu và gấp đôi số tính năng so với ví dụ IMDB vì vậy tôi không nghĩ đó là vấn đề. Đối với lớp nhúng, chính xác bạn sẽ kết nối lớp LSTM với đầu vào như thế nào? Theo tài liệu keras.io/layers/reciverse/#lstm LSTM của Keras chỉ lấy các khởi tạo, kích hoạt và output_dim làm đối số. Nếu đó là nguồn gốc của lỗi, mã mô tả cách loại bỏ lớp nhúng sẽ được đánh giá rất cao.
wacax

Xin vui lòng xem câu trả lời của tôi. Có vẻ như bạn không cần lớp nhúng.
cướp biển

Câu trả lời:


5

Một lớp nhúng biến các số nguyên dương (chỉ mục) thành các vectơ dày đặc có kích thước cố định. Ví dụ , [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]. Chuyển đổi đại diện này được học tự động với lớp nhúng trong Keras (xem tài liệu ).

Tuy nhiên, dường như dữ liệu của bạn không cần bất kỳ lớp nhúng nào như vậy để thực hiện chuyển đổi. Có một lớp nhúng không cần thiết có khả năng là lý do tại sao bạn không thể khiến LSTM của mình hoạt động bình thường. Nếu đó là trường hợp thì bạn chỉ cần loại bỏ lớp nhúng.

Lớp đầu tiên trong mạng của bạn sẽ có input_shapethêm đối số được thêm thông tin về kích thước của dữ liệu của bạn (xem ví dụ ). Lưu ý rằng bạn có thể thêm đối số này vào bất kỳ lớp nào - nó sẽ không có trong tài liệu cho bất kỳ lớp cụ thể nào.


Nhân tiện, siêu âm thường được điều chỉnh bằng cách sử dụng tìm kiếm ngẫu nhiên hoặc tối ưu hóa Bayes. Tôi sẽ sử dụng RMSProp và tập trung vào điều chỉnh kích thước lô (các kích thước như 32, 64, 128, 256 và 512), cắt độ dốc (trong khoảng 0,1-10) và bỏ (trong khoảng 0,1-0,6). Các chi tiết cụ thể tất nhiên phụ thuộc vào dữ liệu và kiến ​​trúc mô hình của bạn.


Bạn đề xuất gì để thay thế lớp nhúng bằng? Tôi đã cố gắng chỉ đơn giản là loại bỏ lớp nhúng nhưng nó không hoạt động.
wacax

1
Nhìn vào các ví dụ khác - bắt đầu ví dụ trực tiếp với lớp Mật độ. Nhớ đặt tham số input_shape.
cướp biển

5

Tôi muốn giới thiệu Bayesian Optimization cho tìm kiếm siêu tham số và có kết quả tốt với Spearmint. https://github.com/HIPS/Spearmint Bạn có thể phải sử dụng phiên bản cũ hơn cho mục đích thương mại.



2

Talos chính xác là những gì bạn đang tìm kiếm; một giải pháp tự động để tìm kiếm các kết hợp siêu tham số cho các mô hình Keras. Tôi có thể không khách quan với tư cách là tác giả, nhưng ý định là cung cấp một giải pháp thay thế với đường cong học tập thấp nhất có thể trong khi phơi bày hoàn toàn chức năng của Keras.

Ngoài ra, như đã được đề cập, bạn có thể xem xét Hyperas , hoặc sau đó là SKlearn hoặc AutoKeras . Theo hiểu biết của tôi, tại thời điểm viết bài, 4 cái này là các tùy chọn dành riêng cho người dùng Keras.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.