2017-03-23 12 views
1

ケラスでLSTMプログラムを使用してモデルを実装しました。私はLSTM層の隠れノードの表現を得ることを試みています。これは隠されたノードの表現(変数のアクティベーションに格納されている)を得る正しい方法ですか?ケラスでLSTMの隠れノード表現を取得する方法

model = Sequential() 
model.add(LSTM(50, input_dim=sample_index)) 

activations = model.predict(testX) 

model.add(Dense(no_of_classes, activation='softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='adagrad', metrics=['accuracy']) 
hist=model.fit(trainX, trainY, validation_split=0.15, nb_epoch=5, batch_size=20, shuffle=True, verbose=1) 
+0

コードにはどのような問題がありますか?それが正しいと思いますか?なぜあなたはそうではないと思いますか? – nemo

+0

コードが正しく実行されていますが、これがlstmsの隠し表現を取得する正しい方法であるかどうかはわかりません – user3218279

答えて

1

編集:あなたの隠し表現を取得する方法も正しいです。 リファレンス:https://github.com/fchollet/keras/issues/41

モデルをトレーニングした後、モデルとウェイトを保存できます。このように:

from keras.models import model_from_json 

json_model = yourModel.to_json() 
open('yourModel.json', 'w').write(json_model) 
yourModel.save_weights('yourModel.h5', overwrite=True) 

次に、LSTMレイヤーの重みを視覚化することができます。このように:

from keras.models import model_from_json 
import matplotlib.pyplot as plt 

model = model_from_json(open('yourModel.json').read()) 
model.load_weights('yourModel.h5') 

layers = model.layers[1] # find the LSTM layer you want to visualize, [1] is just an example 
weights, bias = layers.get_weights() 
plt.matshow(weights, fignum=100, cmap=plt.cm.gray) 
plt.show() 
関連する問題