import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")
if gpus:
gpu0 = gpus[0]
tf.config.experimental.set_memory_growth(gpu0, True)
tf.config.set_visible_device([gpu0], "GPU")
import tensorflow as tf
from tensorflow.keras import datasets,layers,models
import matplotlib.pyplot as plt
(train_images, train_lables), (test_images, test_lables) = datasets.mnist.load_data()
代码用于在训练机器学习模型之前对图像数据进行像素值归一化。在这种情况下,图像数据被除以255.0。
在许多图像数据集中,像素值的范围通常是从0到255,其中0代表黑色,255代表白色。将像素值除以255.0进行归一化,可以将值缩放到0到1之间。这种归一化通常用于确保所有输入特征(在这种情况下是像素值)都在一个相似的范围内,这有助于模型在训练过程中更快地收敛。
train_images, test_images = train_images / 255.0, test_images / 255.0
print(train_images.shape, test_images.shape, train_lables.shape, test_lables.shape)
#进行图像大小为10宽10长的绘图
plt.figure(figsize = (10, 10))
for i in range(20):
plt.subplot(2, 10, i + 1)
#设置不显示x轴刻度
plt.xticks([])
#设置不显示y轴刻度
plt.yticks([])
#设置不显示子图网络格
plt.grid(False)
#图像显示,cmap为颜色绘图,plt.cm.binary为matplotlib.cm的色表
plt.imshow(train_images[i], cmap = plt.cm.binary)
#设置x轴为标签显示的图片的对应的数字
plt.xlabel(train_lables[i])
plt.show()
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
import tensorflow as tf
from tensorflow.keras import datasets,layers,models
import matplotlib.pyplot as plt
#构建简单的CNN网络
# 创建并设置卷积神经网络
# 卷积层:通过卷积操作对输入图像进行降维和特征抽取
# 池化层:是一种非线性形式的下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的鲁棒性。
# 全连接层:在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。
model = models.Sequential([
#设置二维卷积层1,设置32个3*3的卷积核,activation参数将激活函数设置为ReLU函数,input_shape参数将图层的输入形状设置为(28,28,1)
#ReLU函数作为激活函数可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层
#相比较其他函数,ReLU函数更受欢迎,它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成显著影响。
layers.Conv2D(32, (3, 3), activation = 'relu', input_shape= (28, 28, 1)),
#池化层1,2*2采样
layers.MaxPooling2D((2, 2)),
#设置二维卷积层2
layers.Conv2D(64, (3, 3), activation = 'relu'),
#池化层2,2*2采样
layers.MaxPooling2D((2, 2)),
layers.Flatten(),#Flatten层,连接卷积层与全连接层
layers.Dense(64, activation = 'relu'),#全连接层,特征进一步提取,64为输出空间的维数,activation参数将激活函数设置为热炉函数
layers.Dense(10)#输出层,输出预期结果,10为输出空间的维数
])
model.summary()#打印网络结构
创建一个顺序对象,并将各个网络层按顺序添加到该对象中。
之后通过Flatten层将特征图展开为一个维向量,为全连接层做准备。
接下来是两个全连接层(Dense):
使用model.summary()函数打印模型的摘要信息,其中包含每一层的名称、输出形状和参数数量等。
关于model.fit(x, y, batch_size, epochs, validation_data)函数
x
: 输入数据,可以是Numpy数据组、Pandas DataFrame或Tensor对象。它包含训练样例的特征。y
: 目标数据,与输入数据相对应的目标变量。可以是Numpy数据组、Pandas Series或Tensor数据。它包含训练样例的标签。batch_size
: 整数值,指定每次批次的样本量。在模型更新之前,模型会根据这个值将培训训练数据分配给多个批次。默认值为32。epochs
: 整数值,表示训练的轮数。每个epoch表示使用训练数据中的所有样例完成一次前向传播和反向传播的过程。默认值为1。validation_data
: 可选参数,用于在训练过程中评估模型的试验数据。可以是包含输入数据和目标数据的元组(x_val, y_val)
。model.fit()
函数会根据指标的训练数据和参数对模型进行训练。它会自动执行前向传播、计算损失函数、反向传播以及参与数字更新的过程。训练过程中的损失函数和指标的变化会显示在输出中。
在训练过程中,可以通过设置回复函数(如EarlyStopping、ModelCheckpoint等)来监控训练过程并采集相应的操作。
训练完成后,模型的权力和参与数字会被更新,可以使用该模型进行预测或评估任务。
import tensorflow as tf
from tensorflow.keras import datasets,layers,models
import matplotlib.pyplot as plt
(train_images, train_lables), (test_images, test_lables) = datasets.mnist.load_data()
train_images, test_images = train_images / 255.0, test_images / 255.0
#train_images.shape, test_images.shape, train_lables.shape, test_lables.shape
#二、构建简单的CNN网络
# 创建并设置卷积神经网络
# 卷积层:通过卷积操作对输入图像进行降维和特征抽取
# 池化层:是一种非线性形式的下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的鲁棒性。
# 全连接层:在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。
model = models.Sequential([
#设置二维卷积层1,设置32个3*3的卷积核,activation参数将激活函数设置为ReLU函数,input_shape参数将图层的输入形状设置为(28,28,1)
#ReLU函数作为激活函数可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层
#相比较其他函数,ReLU函数更受欢迎,它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成显著影响。
layers.Conv2D(32, (3, 3), activation = 'relu', input_shape= (28, 28, 1)),
#池化层1,2*2采样
layers.MaxPooling2D((2, 2)),
#设置二维卷积层2
layers.Conv2D(64, (3, 3), activation = 'relu'),
#池化层2,2*2采样
layers.MaxPooling2D((2, 2)),
layers.Flatten(),#Flatten层,连接卷积层与全连接层
layers.Dense(64, activation = 'relu'),#全连接层,特征进一步提取,64为输出空间的维数,activation参数将激活函数设置为热炉函数
layers.Dense(10)#输出层,输出预期结果,10为输出空间的维数
])
model.summary()#打印网络结构
'''设置优化器、损失函数以及metrics
'''
model.compile(
#设置优化器为Adam优化器
optimizer = 'adam',
#设置损失函数为交叉熵损失函数tf.keras.losses.SparseCategoricalCrossentropy(from_logits = True)
#from_logits为True时,会将y_pred转化为概率,此时结果更加稳定
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits = True),
#设置性能指标列表,将在模型训练时监控列表中的指标
metrics = ['accuracy']
)
#输入训练数据集、验证数据集以及迭代次数epochs
history = model.fit(
train_images,
train_lables,
epochs = 10,
validation_data = (test_images, test_lables)
)
plt.imshow(test_images[1])
pre = model.predict(test_images)
print(pre[1])