【问题标题】:Kernel Shutdown While model.predict() Keras Model内核关闭时 model.predict() Keras 模型
【发布时间】:2021-04-06 07:58:44
【问题描述】:

所以我目前遇到的问题是,每次我预测我加载的模型时,我的 Jupyter Notebook 的内核都会关闭。

所以我得到了这个带有这个模型摘要的 Keras 模型:

    Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 100)               200       
_________________________________________________________________
re_lu_1 (ReLU)               (None, 100)               0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 50)                5050      
_________________________________________________________________
re_lu_2 (ReLU)               (None, 50)                0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 51        
=================================================================
Total params: 5,301
Trainable params: 5,301
Non-trainable params: 0

我打算使用我上网的this method 来保存这个模型。我保存了整个模型。然后,我尝试将保存的模型加载到另一个笔记本上。完成尺寸/形状调整后,我开始注意到每次执行 model.predict() 时,我的内核都会关闭并且没有给出错误消息。所以我开始向后做,试图在原始笔记本上进行预测,模型是在哪里训练的。而且我没有发现错误。我的假设是:

  1. 模型没有问题。因为这样它可以预测一个数据。任何比这更大的东西,它都会粉碎。
  2. 问题来自保存和加载模型

这是我保存和加载模型的代码

模型起源笔记本

有没有人遇到过同样的问题?以下代码是我的代码:

#Model architecture
#Model ANN
model = Sequential()
model.add(Dense(100, input_shape=(1,)))
model.add(ReLU())
model.add(Dropout(.5))
model.add(Dense(50))
model.add(ReLU())
model.add(Dropout(.5))
model.add(Dense(1))
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
model.fit(X_train, y_train, epochs=1000, batch_size=100, validation_data=(X_valid, y_valid))

# ATTEMPT 1 save the model to disk
filename = 'model_pake_pickle_bener.sav'
pickle.dump(model, open(filename, 'wb'))

不同的笔记本

这就是问题所在

#Load the saved model
filename = 'model_pake_pickle_bener.sav'
loaded_model = pickle.load(open(filename, 'rb'))

#reduce number of data used
bersih = bessp[:2]

#Introducing our dataset to tf (Voltage only)
X = bersih['Voltage_y'].values
y = bersih['SOC'].values

#Reshaping
X = X.reshape(X.shape[0], 1)
y = y.reshape(y.shape[0], 1)

#Adjustment
X = np.asarray(X).astype('float32')

y = loaded_model.predict(X)

我尝试过使用 h5 文件,结果和其他文件一样。

【问题讨论】:

  • 是否有可用的崩溃日志?
  • 我的猜测是使用pickle 保存模型时缺少一些东西。当 TF 将模型保存到磁盘时,它还包括图形定义(请参阅docs 了解更多信息)
  • 不,没有给出崩溃日志。但是,当我在 Google Colab 上使用我的笔记本时,它给出了错误消息“ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float)”。但这是在重塑部分之前。

标签: tensorflow keras jupyter-notebook


【解决方案1】:

您是否尝试过使用直接对象方法保存和加载模型?我注意到您使用pickle,但it's recommended to use(取自文档):

model = ...  # Get model (Sequential, Functional Model, or Model subclass)
model.save('path/to/location')

在你的第二个笔记本中加载模型:

from tensorflow import keras
model = keras.models.load_model('path/to/location')

【讨论】:

  • 嘿,是的,我已经尝试过这种方式。 h5格式和普通格式。无论哪种方式,如果我在训练模型的原始笔记本之外使用它们,Pickle 和直接对象方法都将不起作用。
  • 您在使用 Colab 吗?我注意到有时文件无法正确同步到您安装的 Google Drive。
  • 不,我正在使用 Jupyter。
猜你喜欢
  • 2018-02-05
  • 1970-01-01
  • 2011-10-31
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2016-08-11
  • 1970-01-01
相关资源
最近更新 更多