[英]Can't save Keras model
我正在使用Colab創建一個簡單的Keras模型,對其進行編譯,訓練,運行預測,然后嘗試按此處所述保存模型
問題是我收到此錯誤:
FailedPreconditionError: Attempting to use uninitialized value input/kernel
[[Node: _retval_input/kernel_0_1 = _Retval[T=DT_FLOAT, index=1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](input/kernel)]]
這是我的模型:
locModel = Sequential()
locModel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(240, 130,1), name='input'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Conv2D(64, (3, 3), activation='relu'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Conv2D(128, (2, 2), activation='relu'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Flatten())
locModel.add(Dense(256, activation='relu'))
locModel.add(Dense(8, name='predicted_corners'))
sgd = SGD(lr=0.01, momentum=0.9, nesterov=True)
locModel.compile(loss='mean_squared_error',metrics=['accuracy'], optimizer=sgd)
訓練:
hist = locModel.fit(imageData,
localization_labels,
epochs=100,
validation_split=0.2,
callbacks=[tbCallBack])
評價:
predictions = locModel.predict(testImages)
然后,我嘗試保存它,如上面的鏈接中所述:
import tensorflow as tf
from keras import backend as K
KERAS_MODEL_NAME = "keras.hdf5"
# Save tf.keras model in HDF5 format.
tf.keras.models.save_model(locModel, KERAS_MODEL_NAME)
任何幫助表示贊賞!
TensorFlow版本: 1.10.0
Keras版本: 2.1.6
更新1:
locModel.save_weights('weights.h5')
完全沒有錯誤-我的最終目標是轉換為TFLite,所以我需要整個圖表。
更新2:
為圖層添加了初始化程序:
locModel = Sequential()
locModel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(240, 130,1), name='input', kernel_initializer='random_uniform'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='random_uniform'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Conv2D(128, (2, 2), activation='relu', kernel_initializer='random_uniform'))
locModel.add(MaxPooling2D(pool_size=(2, 2)))
locModel.add(Flatten( ))
locModel.add(Dense(256, activation='relu'))
locModel.add(Dense(8, name='predicted_corners'))
sgd = SGD(lr=0.01, momentum=0.9, nesterov=True)
locModel.compile(loss='mean_squared_error',metrics=['accuracy'], optimizer=sgd)
經過以上更改,我得到以下錯誤
ValueError: Fetch argument <tf.Variable 'input_1/kernel:0' shape=(3, 3, 1, 32) dtype=float32_ref> cannot be interpreted as a Tensor. (Tensor Tensor("input_1/kernel:0", shape=(3, 3, 1, 32), dtype=float32_ref) is not an element of this graph.)
更改自:
tf.keras.models.save_model(locModel, KERAS_MODEL_NAME)
變成:
keras.models.save_model(locModel, KERAS_MODEL_NAME)
您正在將tensorflow.keras與用於創建您的模型的keras軟件包混合,這似乎是不允許的。 確保重新啟動筆記本計算機,以清除模型中的舊不一致之處。 我遇到了完全相同的問題,一旦我對所有keras調用一致使用相同的程序包,它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.