Exercise 4 - Handling Complex Images

发布时间 2023-11-30 22:58:47作者: 跑调的弦

Exercise 4 - Handling Complex Images

下面是代码,链接到一个包含 80 张图像(40 张快乐图像和 40 张悲伤图像)的快乐或悲伤数据集。创建一个卷积神经网络,对这些图像进行 100%准确率的训练,当训练准确率大于 0.999 时取消训练。
提示:最好使用 3 个卷积层。


import tensorflow as tf
import os
import zipfile


DESIRED_ACCURACY = 0.999

#直接ulr下载
#!wget --no-check-certificate \
#    "https://storage.googleapis.com/learning-datasets/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()


  # Your Code
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()
# 该代码块应定义并编译模型
model = tf.keras.models.Sequential([
# Your Code Here    
	tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(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

# Your Code Here #
model.compile(loss='binary_crossentropy',
              optimizer=RMSprop(lr=0.001),
              metrics=['accuracy'])
# 该代码块应创建一个名为 train_datagen 的 ImageDataGenerator 实例
# 并通过调用 train_datagen.flow_from_directory 创建 train_generator

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1/255) # Your Code Here

train_generator = train_datagen.flow_from_directory(
        "./tmp/h-or-s",  
        target_size=(150, 150), 
        batch_size=10,
        class_mode='binary')
        # Your Code Here)

# 预期输出: 找到属于 2 个类别的 80 幅图像
# 该代码块应调用 model.fit 并训练
# 若干次历时。
history = model.fit(
      train_generator,
      steps_per_epoch=8,  
      epochs=15,
      verbose=1,
      callbacks=[callbacks])
      # Your Code Here)
  
# 预期输出: "准确率达到 99.9%,因此取消训练!"

image