迁移学习和微调

本文介绍如何使用TensorFlow进行迁移学习,首先配置GPU资源,然后使用`tf.keras.utils.image_dataset_from_directory`加载猫狗图片数据集,进行数据增强。接下来,基于MobileNetV2进行特征提取,并添加全局平均池化层和全连接层,构建模型。通过设置`base_model.trainable`进行微调,使用RMSprop优化器和较低的学习率进行训练。最后,展示训练和验证的准确率及损失变化,并在测试集上评估模型性能。
摘要由CSDN通过智能技术生成

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#设置tensorflow的日志级别
from tensorflow.python.platform import build_info

import tensorflow as tf

# 列出所有物理GPU设备  
gpus = tf.config.list_physical_devices('GPU')  
if gpus:  
    # 如果有GPU,设置GPU资源使用率  
    try:  
        # 允许GPU内存按需增长  
        for gpu in gpus:  
            tf.config.experimental.set_memory_growth(gpu, True)  
        # 设置可见的GPU设备(这里实际上不需要,因为已经通过内存增长设置了每个GPU)  
        # tf.config.set_visible_devices(gpus, 'GPU')  
        print("GPU可用并已设置内存增长模式。")  
    except RuntimeError as e:  
        # 虚拟设备未就绪时可能无法设置GPU  
        print(f"设置GPU时发生错误: {e}")  
else:  
    # 如果没有GPU  
    print("没有检测到GPU设备。")

import matplotlib.pyplot as plt
import numpy as np

PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered')

train_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')

BATCH_SIZE = 32
IMG_SIZE = (160, 160)
train_dataset = tf.keras.utils.image_dataset_from_directory(train_dir,
                                                            shuffle=True,
                                                            batch_size=BATCH_SIZE,
                                                            image_size=IMG_SIZE)

validation_dataset = tf.keras.utils.image_dataset_from_directory(validation_dir,
                                                                 shuffle=True,
                                                                 batch_size=BATCH_SIZE,
                                                                 image_size=IMG_SIZE)

class_names = train_dataset.class_names
class_names=['猫' if i=='cats' else '狗' for i in class_names]
print(class_names)

plt.figure(figsize=(10, 10))
plt.rcParams['font.family'] = 'WenQuanYi Micro Hei'  # 设置字体为中文字体
for images, labels in train_dataset.take(1):#从训练集取出一个批次
  for i in range(25):#显示前25张图片
    plt.subplot(5,5, i + 1)#5行5列子视图
    plt.xticks([])#不带刻度
    plt.yticks([])
    plt.grid(False) #不带网格
    plt.imshow(images[i].numpy().astype('uint8'))
    plt.xlabel(class_names[labels[i]])
plt.show()

# 由于原始数据集不包含测试集,因此您需要创建一个。为此,请使用 tf.data.experimental.cardinality
# 确定验证集中有多少批次的数据,然后将其中的 20% 移至测试集。

val_batches = tf.data.experimental.cardinality(validation_dataset)

val_batches.numpy()

# 注意,这种分割是“惰性”的,即数据集不会被立即加载到内存中,而是在需要时
# (例如,在迭代数据集时)才会进行实际的分割操作。

test_dataset = validation_dataset.take(val_batches // 5)#获取前6个批次
validation_dataset = validation_dataset.skip(val_batches // 5)#获取余下的批次

print('验证集批次: %d' % tf.data.experimental.cardinality(validation_dataset))
print('测试集批次: %d' % tf.data.experimental.cardinality(test_dataset))

len(train_dataset)*BATCH_SIZE

A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值