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