在带回家进行公司面试时,我遇到了编码问题。
问题:我尝试在keras中训练LSTM网络,训练后将文件保存为JSON,并将权重保存为.h5文件,当我尝试检索该文件并预测其他样本时。
我收到一条错误消息,提示“ InvalidArgumentError:synchronous_25_input:0已送入和获取。”我在这个问题上用Google搜索,这似乎很少见,有一些与此问题有关的问题,但并不完全相同。我认为当前的Keras软件包没有任何问题,我的代码中存在一些问题。我的JSON文件看起来也有些奇怪,它的配置列表为空,即使我调整了许多超级参数,也不知道是不是造成了这个问题。
我对Keras并不陌生,而且我在这项工作上有时间限制。
我已经尝试过针对类似问题的许多Stack Overflow问题, 但他们似乎都没有关连或完全回答我的问题。我认为我的问题 更多的是与代码相关的代码,而不是Keras版本中的某些错误。
这是我的代码:用于检索保存的文件
# load json and create model
json_file = open('lstm_model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_lstm_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_lstm_model.load_weights("lstm_model_weights.h5")
print("Loaded model from disk")
# evaluate loaded model on test data
loaded_lstm_model.compile(loss='binary_crossentropy',
optimizer='adam', metrics=
['accuracy'])
loaded_lstm_model.predict_classes(x=features_test_docs, batch_size=
len(features_test_docs),verbose=0 )
我的features_test_docs是一个3-D数组,其中包含(样本数,时间步长, 每个时间步中的功能数量)。这种形状与我先前所训练的功能一致。
这是我的代码:用于我的lstm单元的示例体系结构
self.lstm_model.add(
LSTM (self.X.shape[2], return_sequences=True,
input_shape= (self.num_tsteps, self.num_dim), activation='elu',
recurrent_activation = 'elu',
kernel_initializer='he_uniform', recurrent_initializer='he_uniform',
use_bias=True
))
这是保存的JSON文件:
{"class_name": "Sequential", "config": [], "keras_version": "2.2.0", "backend": "tensorflow"}
带有预测类别的二维数组
[[1],[1],[0],[0],[0] .....]