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.