我正在训练使用TFRecordDataset迭代器作为输入的Keras模型。训练阶段效果很好,但是当我调用model.predict
时,模型仍然使用训练数据代替新数据作为输入。
# Load data as tensorflow iterator on a TFRecordDataset
X, y = loader.load_training_tensor_iterator()
X_test, y_test = loader.load_test_tensor_iterator()
# Build the model
input_layer = Input(tensor=X)
reshape = Flatten(input_shape=(-1, 10, 128))(input_layer)
a1 = Dense((200))(reshape)
a1 = BatchNormalization()(a1)
a1 = Activation('relu')(a1)
a1 = Dropout(drop_rate)(a1)
output_layer = Dense(classes_num, activation='sigmoid')(a1)
model = keras.models.Model(inputs=input_layer, outputs=output_layer)
model.compile(optimizer=keras.optimizers.Adam(lr=1e-3),
loss='binary_crossentropy',
target_tensors=[y])
model.fit(
epochs=EPOCHS,
steps_per_epoch=math.ceil(TRAINING_SET_SIZE/BATCH_SIZE))
现在,当我尝试使用模型并获得测试数据的预测时:
# Run predictions
y_pred = model.predict(X_test, steps=3)
我在y_pred
中得到的是对训练集X
的预测,而不是对X_test
的预测。
如何在预测时指定输入张量应该是传递给predict
的数据,而不是传递给X
的张量Input(tensor=X)
?
答案 0 :(得分:2)
有关输入层和Keras documentation方法,请参考compile。设置张量参数时,Keras不会为输入创建占位符,这就是您无法在X_test上运行预测的原因。您可以输入模型而无需在输入层或编译方法中设置张量选项并训练模型,这将使您能够进行预测,或者通过输入占位符来使用其他变量进行评估。 Here是显示测试的示例,该示例使用Keras的数据集API定义了这种方式。