PicklingError:不能腌制<class'module'=“”>:内置的属性查找模块失败

时间:2017-07-24 20:55:01

标签: python keras pickle prediction

我们可以保存任何已创建的LSTM模型吗?我相信“pickling”是将python对象序列化为文件的标准方法。理想情况下,我想创建一个包含一个或多个函数的python模块,这些函数允许我指定一个LSTM模型来加载或使用硬编码的预拟合模型来根据传入的数据生成预测以初始化模型。

我尝试使用它但给了我一个错误。

我使用的代码:

    # create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(50, batch_input_shape=(batch_size, look_back, 1), stateful=True, return_sequences=True))
model.add(Dropout(0.3))
model.add(Activation('relu'))
model.add(LSTM(50, batch_input_shape=(batch_size, look_back, 1), stateful=True)) 
model.add(Dropout(0.3))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('relu'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics = ['accuracy'])
for i in range(10):
    model.fit(trainX, trainY, epochs=1, batch_size=batch_size, verbose=2, shuffle=False)
    model.reset_states()

with open ('sequential.pickle','wb') as f:
    pickle.dump(model,f)

pickle_in = open ('sequential.pickle','rb')
model = pickle.load(pickle_in)

# make predictions
trainPredict = model.predict(trainX, batch_size=batch_size)
model.reset_states()
testPredict = model.predict(testX, batch_size=batch_size)

1 个答案:

答案 0 :(得分:4)

来自documentation

  

建议不要使用pickle或cPickle来保存Keras模型。

     

您可以使用model.save(filepath)将Keras模型保存到单个模型中   HDF5文件将包含:

     
      
  • 模型的架构,允许重新创建模型
  •   
  • 模型的权重
  •   
  • 培训配置(损失,优化程序)
  •   
  • 优化器的状态,允许您从中断的位置恢复训练。然后,您可以使用keras.models.load_model(filepath)   重新验证您的模型。
  •   

要保存模型,您需要致电model.save

model.save('model.h5')  # creates a HDF5 file 'model.h5'

同样,加载模型的方式如下:

from keras.models import load_model
model = load_model('model.h5')