簡體   English   中英

無法保存Keras模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM