저는 LSTM 레이어를 기반으로 한 Keras로 NN 모델을 개발했습니다. Paperspace (GPU 클라우드 프로세싱 인프라)의 속도를 높이기 위해 LSTM 레이어를 새 CuDNNLSTM 레이어로 전환했습니다. 그러나 이것은 GPU cuDNN을 지원하는 컴퓨터에서만 사용할 수 있습니다. PS : CuDNNLSTM은 Keras master
에서만 사용할 수 있으며 최신 릴리스에서는 사용할 수 없습니다.Keras 사용하기, CuDNNLSTM에서 생성 된 가중치를 LSTM 모델에로드하려면 어떻게해야합니까?
그래서 무게를 생성하고이를 구름에 hdf5
형식으로 저장했습니다. MacBook에서 로컬로 사용하고 싶습니다. CuDNNLSTM 계층을 사용할 수 없기 때문에 로컬 설치를 위해서만 다시 LSTM으로 전환했습니다.
이 글을 읽고 tweet about CuDNN from @fchollet 나는 LSTM 모델로 무게를 다시 읽는 것만으로도 효과가있을 것이라고 생각했습니다. 그러나
, 내가 Keras이 오류를 던지고을 가져 오려고 :
Traceback (most recent call last):
{...}
tensorflow.python.framework.errors_impl.InvalidArgumentError: Dimension 0 in both shapes must be equal, but are 2048 and 4096 for 'Assign_2' (op: 'Assign') with input shapes: [2048], [4096].
{...}
ValueError: Dimension 0 in both shapes must be equal, but are 2048 and 4096 for 'Assign_2' (op: 'Assign') with input shapes: [2048], [4096]
나는 두 구조가 다른 것을 알 수 있습니다 h5cat와 hdf5
파일을 분석.
TL; DR
I는 LSTM 모델로 CuDNNLSTM 로부터 생성 된 가중치들을로드 할 수있다. 잘못된 방식으로 뭔가를하고 있습니까? 어떻게하면 원활하게 작동하게 할 수 있습니까?
SelectedLSTM = CuDNNLSTM if is_gpu_enabled() else LSTM
# ...
model = Sequential()
model.add(SelectedLSTM(HIDDEN_DIM, return_sequences=True, input_shape=(SEQ_LENGTH, vocab_size)))
model.add(Dropout(0.2))
model.add(SelectedLSTM(HIDDEN_DIM, return_sequences=False))
model.add(Dense(vocab_size))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')