自学内容网 自学内容网

T5打卡-运动鞋识别

1.导入及查看数据:

from tensorflow import keras
from tensorflow.keras import layers,models
import os,PIL,pathlib
import matplotlib.pyplot as plt
import tensorflow as tf

gpus=tf.config.list_physical_devices("GPU")
if gpus:
    gpu0=gpus[0]
    tf.conifg.experimental.set_memory_growth(gpu0,True)
    tf.config.set_visible_devices([gpu0],"GPU")
    
gpus

data_dir="data/46-data"
data_dir=pathlib.Path(data_dir)
#查看图片数量
image_count=len(list(data_dir.glob("*/*/*.jpg")))
print("图片总数为:",image_count)
#查看图片
roses=list(data_dir.glob('train/nike/*.jpg'))
PIL.Image.open(str(roses[0]))

2.加载数据:

batch_size = 32
img_height = 224
img_width = 224

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "data/46-data/train/",
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "data/46-data/test/",
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size)
#查看种类
class_names = train_ds.class_names
print(class_names)

3.数据可视化

plt.figure(figsize=(20,10))
for images,labels in train_ds.take(1):
    for i in range(20):
        ax=plt.subplot(5,10,i+1)
        plt.imshow(images[i].numpy().astype("uint8"))
        plt.title(class_names[labels[i]])
        plt.axis("off")

4.检查数据与配置数据:

for image_batch,labels_batch in train_ds:
    print(image_batch.shape)
    print(labels_batch.shape)
    break

AUTOTUNE = tf.data.AUTOTUNE

train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

5.构建模型:

model = models.Sequential([
    layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
    
    layers.Conv2D(16, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), 
    layers.AveragePooling2D((2, 2)),              
    layers.Conv2D(32, (3, 3), activation='relu'),  
    layers.AveragePooling2D((2, 2)),               
    layers.Dropout(0.3),  
    layers.Conv2D(64, (3, 3), activation='relu'), 
    layers.Dropout(0.3),  
    
    layers.Flatten(),                       
    layers.Dense(128, activation='relu'),  
    layers.Dense(len(class_names))               
])

model.summary() 

6.编译并训练模型

initial_learning_rate =0.0001

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate, 
        decay_steps=10,      
        decay_rate=0.92,     
        staircase=True)

optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

model.compile(optimizer=optimizer,
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history=model.fit(train_ds,
                  validation_data=val_ds,
                  epochs=epochs,
                  callbacks=[checkpointer,earlystopper])

7.结果可视化:

acc=history.history['accuracy']
val_acc=val_acc = history.history['val_accuracy']

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs_range = range(len(loss))

plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')

plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

8.预测数据:

model.load_weights('best_model.h5')

from PIL import Image
import numpy as np

img = Image.open("data/46-data/test/adidas/1.jpg")  
image = tf.image.resize(img, [img_height, img_width])

img_array = tf.expand_dims(image, 0)

predictions = model.predict(img_array)
print("预测结果为:",class_names[np.argmax(predictions)])

总结:

1.设置动态学习率——ExponentailDecay函数:

        tf.keras.optimizers.schedules.ExponentialDecay是 TensorFlow 中的一个学习率衰减策略,用于在训练神经网络时动态地降低学习率。学习率衰减是一种常用的技巧,可以帮助优化算法更有效地收敛到全局最小值,从而提高模型的性能。

        主要参数:

        initial_learning_rate(初始学习率):初始学习率大小。

        decay_steps(衰减步数):学习率衰减的步数。在经过 decay_steps 步后,学习率将按照指数函数衰减。例如,如果 decay_steps 设置为 10,则每10步衰减一次。

        decay_rate(衰减率):学习率的衰减率。它决定了学习率如何衰减。通常,取值在 0 到 1 之间。

        staircase(阶梯式衰减):一个布尔值,控制学习率的衰减方式。如果设置为 True,则学习率在每个 decay_steps 步之后直接减小,形成阶梯状下降。如果设置为 False,则学习率将连续衰减。

2.早停设置——EarlyStopping函数:

参数:

  monitor: 被监测的数据。

  min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。

  patience: 没有进步的训练轮数,在这之后训练就会被停止。

  verbose: 详细信息模式。

  mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。

  baseline: 要监控的数量的基准值。 如果模型没有显示基准的改善,训练将停止。

  estore_best_weights: 是否从具有监测数量的最佳值的时期恢复模型权重。 如果为 False,则使用在训练的最后一步获得的模型权重。

3.保存最佳模型参数:

checkpointer = ModelCheckpoint('best_model.h5',
                                monitor='val_accuracy',
                                verbose=1,
                                save_best_only=True,
                                save_weights_only=True)


原文地址:https://blog.csdn.net/qq_52649952/article/details/142662809

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!