我发起了一个回调,但它没有按定义工作
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()
我正在编写代码来使用张量流预测快乐或悲伤的人脸,我将回调 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()