我写了回电,当准确率达到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]
答案 0 :(得分:1)
上述代码的两个主要问题:
validation_split=.2
方法中指定.fit
参数,并在验证集上寻求高精度。keras.callbacks.EarlyStopping
中完成,甚至可以选择在每个时期恢复到最佳总体模型。而且,默认情况下,如果您有验证分组,它会寻找验证准确性,而不是训练准确性。因此,这是您应该做的:
停止使用自定义回调,它们需要一定的技巧才能开始工作。请将EarlyStopping
与restore_best
一起使用。 like this
始终使用validation_split
,并在验证集中寻求高精度。 Like in this quick example。
使用内置回调可以解决您的问题吗?