我发起了一个回调,但它没有按定义工作

I Intiated a callback but it not work as defined

我正在编写代码来使用张量流预测快乐或悲伤的人脸,我将回调 class 定义为:

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs={}):
    if(logs.get('accuracy')>DESIRED_ACCURACY):
      print("\nReached 99.9% accuracy so cancelling training!")
      self.model.stop_training = True

callbacks = myCallback()

但是 returns 这个 :

Model Traning

如你所见 它 returns 应该打印的消息,但模型不会停止训练 正如我将 class 的最后一行编码为 self.model.stop_training = True

时应该做的那样

请指教是什么原因

编辑:这是我用来创建和运行模型

的完整代码
import tensorflow as tf
import os
import zipfile


DESIRED_ACCURACY = 0.999

!wget --no-check-certificate \
    "https://storage.googleapis.com/laurencemoroney-blog.appspot.com/happy-or-sad.zip" \
    -O "/tmp/happy-or-sad.zip"

zip_ref = zipfile.ZipFile("/tmp/happy-or-sad.zip", 'r')
zip_ref.extractall("/tmp/h-or-s")
zip_ref.close()

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self , epochs , logs={}):
    if(logs.get('accuracy')>DESIRED_ACCURACY):
      print('\nend')
      self.model.stop_traning = True
callbacks = myCallback()

# This Code Block should Define and Compile the Model
model = tf.keras.models.Sequential([
                                    tf.keras.layers.Conv2D(16 , (3,3) , activation = 'relu' , input_shape = (150, 150 , 3)),
                                    tf.keras.layers.MaxPool2D(2,2),
                                    tf.keras.layers.Conv2D(32 , (3,3) , activation = 'relu'),
                                    tf.keras.layers.MaxPool2D(2,2),
                                    tf.keras.layers.Conv2D(32 , (3,3) , activation = 'relu'),
                                    tf.keras.layers.MaxPool2D(2,2),
                                    tf.keras.layers.Flatten(),
                                    tf.keras.layers.Dense(512 , activation = 'relu'),
                                    tf.keras.layers.Dense(1 , activation = 'sigmoid')

])

from tensorflow.keras.optimizers import RMSprop

model.compile(loss = 'binary_crossentropy' , optimizer = RMSprop(lr = 0.001) , metrics = ['accuracy'])
model.summary()


# Data genrator

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1/255)


train_generator = train_datagen.flow_from_directory(
        '/tmp/h-or-s' , 
        target_size = (150,150),
        batch_size = 8,
        class_mode = 'binary' )

history = model.fit(
      train_generator , steps_per_epoch = 8 , epochs = 15 , callbacks = [callbacks], verbose = 1)


请查看并找到错误,我没有得到正确的东西 谢谢:)

你拼错了变量。

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self , epochs , logs={}):
    if(logs.get('accuracy')>DESIRED_ACCURACY):
      print('\nend')
      self.model.stop_traning = True  # Check Spelling
callbacks = myCallback()