TensorFlow Keras自定义回调on_test_begin不会覆盖自身

时间:2019-07-08 05:34:29

标签: python tensorflow keras

我正在尝试创建一个自定义回调,当我调用model.fit(...)

时,它将在训练和验证部分的开头和结尾处激活

训练部分(on_train_begin / on_train_end)可以很好地工作,但未调用测试部分(on_test_begin / on_test_end)。在PyCharm中,它甚至不将方法显示为已经存在的方法。对于火车,我会在左侧看到替代标志,但对于测试车则没有。

如何创建将在验证期间激活的自定义回调?我正在使用TensorFlow 1.13(不确定是否会更改任何内容)。

我想这样做是为了能够记录训练的执行时间和验证的执行时间。

我遵循TensorFlow官方网站上的指示:

https://www.tensorflow.org/beta/guide/keras/custom_callback

我还在官方网站上找到了on_test_begin和on_test_end方法:

https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard

class TimeHistory(tf.keras.callbacks.Callback):
    def on_test_begin(slef,logs=None):
        print('testing begins')
    def on_test_end(selfs,logs=None):
        print('testing ends')
    def on_train_begin(self, logs=None):
        print("training begins")
    def on_train_end(self, logs=None):
        print('training ends')

def creationModeleMLP(nbHiddenLayers,nbPerceptrons,nbEpochs,learningRate,myBatchSize,currentFold):
    model = tf.keras.models.Sequential()
    #ajoute le input layer
    model.add(tf.keras.layers.Flatten(input_shape=(76,)))
    #ajoute les hidden layers
    for i in range(nbHiddenLayers):
        model.add(tf.keras.layers.Dense(nbPerceptrons, activation=tf.nn.relu))
    #ajoute le output layer
    model.add(tf.keras.layers.Dense(2, activation=tf.nn.softmax))
    model.compile(optimizer=tf.keras.optimizers.Adam(lr=learningRate),
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    #entraine le modele
    timeHistory = TimeHistory()
    histoire = model.fit(vectPrimTrain[currentFold], typeTrain[currentFold], batch_size=myBatchSize, epochs=nbEpochs,
              callbacks=[tensorboard,timeHistory], validation_data=(vectPrimTest[currentFold],typeTest[currentFold]))

我希望在验证开始时调用on_test_begin方法和on_test_end方法。

谢谢

1 个答案:

答案 0 :(得分:1)

方法on_test_*on_predict_*已添加到tensorflow 1.14+。确保您具有tensorflow 1.14或tensorflow 2才能使用它们。