我写了回电电话,当准确性达到99%时会停止训练。但是问题是我遇到了这个错误。有时,如果我解决了这个错误,即使acuurqacy变成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]
上面的代码有两个主要问题:
validation_split=.2
在.fit
方法中指定参数,并在验证集上寻找高精度。keras.callbacks.EarlyStopping
,它甚至可以选择在每个时期恢复到最佳总体模型。而且,默认情况下,如果您有验证分组,它会寻找验证准确性,而不是训练准确性。所以,这是您应该做的:停止使用自定义回调,它们需要一定的掌握才能上班。使用EarlyStopping
带restore_best
代替。这样,请始终使用validation_split
并在验证集中寻求高精度。就像在这个简单的例子中一样。
使用内置回调可以解决您的问题吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句