回叫在张量流中不起作用以停止训练

时间:2020-08-28 08:52:03

标签: python tensorflow keras

我写了回电,当准确率达到99%时会停止训练。但是问题是我遇到了这个错误。有时候,如果我解决了这个错误,即使准确度达到100%,回电也不会被调用。

'>'在'NoneType'和'float'实例之间不支持

    class myCallback(tf.keras.callbacks.Callback):
        
        def on_epoch_end(self, epoch, logs={}):
            
            if(logs.get('accuracy') > 0.99):
                
                
               
               self.model.stop_training = True


def train_mnist():
    # Please write your code only where you are indicated.
    # please do not remove # model fitting inline comments.

    # YOUR CODE SHOULD START HERE

    # YOUR CODE SHOULD END HERE
    call = myCallback()
    mnist = tf.keras.datasets.mnist

    (x_train, y_train),(x_test, y_test) = mnist.load_data(path=path)
    # YOUR CODE SHOULD START
    x_train = x_train/255
    y_train = y_train/255
    # YOUR CODE SHOULD END HERE
    model = tf.keras.models.Sequential([
        # YOUR CODE SHOULD START HERE
          keras.layers.Flatten(input_shape=(28,28)),
          keras.layers.Dense(128,activation='relu'),
          keras.layers.Dense(10,activation='softmax')
        # YOUR CODE SHOULD END HERE
    ])

    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    
    # model fitting
    history = model.fit(# YOUR CODE SHOULD START HERE
          x_train,y_train,epochs=9,callbacks=[call] )
    # model fitting
    return history.epoch, history.history['acc'][-1]

1 个答案:

答案 0 :(得分:1)

上述代码的两个主要问题:

  • 在训练集上达到100%的准确性几乎总是意味着您的模型过度拟合。多数民众赞成在不好。您要做的是在validation_split=.2方法中指定.fit参数,并在验证集上寻求高精度。
  • 您要在自定义回调中构建的内容已经在keras.callbacks.EarlyStopping中完成,甚至可以选择在每个时期恢复到最佳总体模型。而且,默认情况下,如果您有验证分组,它会寻找验证准确性,而不是训练准确性。

因此,这是您应该做的: 停止使用自定义回调,它们需要一定的技巧才能开始工作。请将EarlyStoppingrestore_best一起使用。 like this 始终使用validation_split,并在验证集中寻求高精度。 Like in this quick example


使用内置回调可以解决您的问题吗?

相关问题