我使用Colab来创建一个简单的Keras模型,编译它,训练它,运行预测,然后尝试按描述保存模型here
问题是我得到了这个错误: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)]]
这是我的模型:
^{pr2}$
培训: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 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.)