Dari Keras RNN Tutorial: "RNN itu rumit. Pilihan ukuran batch penting, pilihan kehilangan dan pengoptimal sangat penting, dll. Beberapa konfigurasi tidak akan bertemu."
Jadi ini lebih merupakan pertanyaan umum tentang menyetel hyperparameter dari LSTM-RNN pada Keras. Saya ingin tahu tentang pendekatan untuk menemukan parameter terbaik untuk RNN Anda.
Saya mulai dengan contoh IMDB di Keras 'Github .
model utama terlihat seperti ini:
(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 adalah skor yang adil dan yang lebih penting itu berarti model tersebut, meskipun tidak sepenuhnya dioptimalkan, berfungsi
Data saya adalah Time Series dan tugasnya adalah prediksi biner, sama seperti contohnya. Dan sekarang masalah saya terlihat seperti ini:
#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
Model ini pada dasarnya sama dengan yang IMDB. Padahal hasilnya berarti tidak belajar apa-apa. Namun, ketika saya menggunakan vanilla MLP-NN saya tidak memiliki masalah yang sama, model belajar dan skor meningkat. Saya mencoba meningkatkan jumlah zaman dan meningkatkan-penurunan jumlah unit LTSM tetapi skor tidak akan meningkat.
Jadi saya ingin tahu pendekatan standar untuk tuning jaringan karena secara teori algoritma harus berkinerja lebih baik daripada jaringan perceptron multilayer khusus untuk data deret waktu ini.