重庆装修网站建设怎么在各个网站免费推广信息
news/
2025/9/23 5:59:58/
文章来源:
重庆装修网站建设,怎么在各个网站免费推广信息,城乡建设部网站首页,宝安做棋牌网站建设哪家好文章目录 前期工作1. 设置GPU#xff08;如果使用的是CPU可以忽略这步#xff09;我的环境#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型#xff08;已打包好#xff… 文章目录 前期工作1. 设置GPU如果使用的是CPU可以忽略这步我的环境 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型已打包好2. 自建模型3. 网络结构图 四、编译五、训练模型六、模型评估七、保存and加载模型八、预测 前期工作
1. 设置GPU如果使用的是CPU可以忽略这步
我的环境
语言环境Python3.6.5编译器jupyter notebook深度学习环境TensorFlow2.4.1
import tensorflow as tfgpus tf.config.list_physical_devices(GPU)if gpus:tf.config.experimental.set_memory_growth(gpus[0], True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpus[0]],GPU)2. 导入数据
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号import os,PIL# 设置随机种子尽可能使结果可以重现
import numpy as np
np.random.seed(1)# 设置随机种子尽可能使结果可以重现
import tensorflow as tf
tf.random.set_seed(1)from tensorflow import keras
from tensorflow.keras import layers,modelsimport pathlibdata_dir weather_photos/
data_dir pathlib.Path(data_dir)3. 查看数据
数据集中一共有白月魁、查尔斯、红蔻、马克、摩根、冉冰等6个人物角色。
文件夹含义数量baiyuekui白月魁40 张chaersi查尔斯76 张hongkou红蔻36 张make马克38张mogen摩根30 张ranbing冉冰60张
image_count len(list(data_dir.glob(*/*)))print(图片总数为,image_count)二、数据预处理
1. 加载数据
使用image_dataset_from_directory方法将磁盘中的数据加载到tf.data.Dataset中
batch_size 32
img_height 224
img_width 224train_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.1,subsettraining,seed123,image_size(img_height, img_width),batch_sizebatch_size)Found 280 files belonging to 6 classes.
Using 252 files for training.val_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.1,subsetvalidation,seed123,image_size(img_height, img_width),batch_sizebatch_size)Found 280 files belonging to 6 classes.
Using 28 files for validation.我们可以通过class_names输出数据集的标签。标签将按字母顺序对应于目录名称。
class_names train_ds.class_names
print(class_names)[baiyuekui, chaersi, hongkou, make, mogen, ranbing]2. 可视化数据
plt.figure(figsize(10, 5)) # 图形的宽为10高为5for images, labels in train_ds.take(1):for i in range(8):ax plt.subplot(2, 4, i 1) plt.imshow(images[i].numpy().astype(uint8))plt.title(class_names[labels[i]])plt.axis(off)plt.imshow(images[1].numpy().astype(uint8))3. 再次检查数据
for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break(16, 224, 224, 3)
(16,)Image_batch是形状的张量16,180,180,3。这是一批形状180x180x3的16张图片最后一维指的是彩色通道RGB。Label_batch是形状16的张量这些标签对应16张图片
4. 配置数据集
AUTOTUNE tf.data.AUTOTUNEtrain_ds train_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE)
val_ds val_ds.cache().prefetch(buffer_sizeAUTOTUNE)5. 归一化
normalization_layer layers.experimental.preprocessing.Rescaling(1./255)
normalization_train_ds train_ds.map(lambda x, y: (normalization_layer(x), y))
val_ds val_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch next(iter(val_ds))
first_image image_batch[0]
# 查看归一化后的数据
print(np.min(first_image), np.max(first_image))0.0 0.9928046三、构建VGG-19网络
VGG优缺点分析
VGG优点
VGG的结构非常简洁整个网络都使用了同样大小的卷积核尺寸3x3和最大池化尺寸2x2。
VGG缺点
1)训练时间过长调参难度大。2)需要的存储容量大不利于部署。例如存储VGG-16权重值文件的大小为500多MB不利于安装到嵌入式系统中。
1. 官方模型已打包好
官网模型调用这块我放到后面几篇文章中下面主要讲一下VGG-19
# model keras.applications.VGG19(weightsimagenet)
# model.summary()2. 自建模型
from tensorflow.keras import layers, models, Input
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropoutdef VGG19(nb_classes, input_shape):input_tensor Input(shapeinput_shape)# 1st blockx Conv2D(64, (3,3), activationrelu, paddingsame,nameblock1_conv1)(input_tensor)x Conv2D(64, (3,3), activationrelu, paddingsame,nameblock1_conv2)(x)x MaxPooling2D((2,2), strides(2,2), name block1_pool)(x)# 2nd blockx Conv2D(128, (3,3), activationrelu, paddingsame,nameblock2_conv1)(x)x Conv2D(128, (3,3), activationrelu, paddingsame,nameblock2_conv2)(x)x MaxPooling2D((2,2), strides(2,2), name block2_pool)(x)# 3rd blockx Conv2D(256, (3,3), activationrelu, paddingsame,nameblock3_conv1)(x)x Conv2D(256, (3,3), activationrelu, paddingsame,nameblock3_conv2)(x)x Conv2D(256, (3,3), activationrelu, paddingsame,nameblock3_conv3)(x)x Conv2D(256, (3,3), activationrelu, paddingsame,nameblock3_conv4)(x)x MaxPooling2D((2,2), strides(2,2), name block3_pool)(x)# 4th blockx Conv2D(512, (3,3), activationrelu, paddingsame,nameblock4_conv1)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock4_conv2)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock4_conv3)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock4_conv4)(x)x MaxPooling2D((2,2), strides(2,2), name block4_pool)(x)# 5th blockx Conv2D(512, (3,3), activationrelu, paddingsame,nameblock5_conv1)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock5_conv2)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock5_conv3)(x)x Conv2D(512, (3,3), activationrelu, paddingsame,nameblock5_conv4)(x)x MaxPooling2D((2,2), strides(2,2), name block5_pool)(x)# full connectionx Flatten()(x)x Dense(4096, activationrelu, namefc1)(x)x Dense(4096, activationrelu, namefc2)(x)output_tensor Dense(nb_classes, activationsoftmax, namepredictions)(x)model Model(input_tensor, output_tensor)return modelmodelVGG19(1000, (img_width, img_height, 3))
model.summary()Model: model
_________________________________________________________________
Layer (type) Output Shape Param # input_1 (InputLayer) [(None, 224, 224, 3)] 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 112, 112, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 112, 112, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 56, 56, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 56, 56, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_conv4 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 28, 28, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808
_________________________________________________________________
block4_conv4 (Conv2D) (None, 28, 28, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 14, 14, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv4 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0
_________________________________________________________________
flatten (Flatten) (None, 25088) 0
_________________________________________________________________
fc1 (Dense) (None, 4096) 102764544
_________________________________________________________________
fc2 (Dense) (None, 4096) 16781312
_________________________________________________________________
predictions (Dense) (None, 1000) 4097000 Total params: 143,667,240
Trainable params: 143,667,240
Non-trainable params: 0
_________________________________________________________________3. 网络结构图
结构说明
16个卷积层Convolutional Layer分别用blockX_convX表示3个全连接层Fully connected Layer分别用fcX与predictions表示5个池化层Pool layer分别用blockX_pool表示
VGG-19包含了19个隐藏层16个卷积层和3个全连接层故称为VGG-19
** **
四、编译
在准备对模型进行训练之前还需要再对其进行一些设置。以下内容是在模型的编译步骤中添加的
损失函数loss用于衡量模型在训练期间的准确率。优化器optimizer决定模型如何根据其看到的数据和自身的损失函数进行更新。指标metrics用于监控训练和测试步骤。以下示例使用了准确率即被正确分类的图像的比率。
# 设置优化器
opt tf.keras.optimizers.Adam(learning_rate1e-4)model.compile(optimizeropt,losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue),metrics[accuracy])五、训练模型
epochs 10history model.fit(train_ds,validation_dataval_ds,epochsepochs
)Epoch 1/10
16/16 [] - 21s 274ms/step - loss: 5.4494 - accuracy: 0.1508 - val_loss: 6.8600 - val_accuracy: 0.0714
Epoch 2/10
16/16 [] - 2s 130ms/step - loss: 1.7976 - accuracy: 0.3174 - val_loss: 6.8402 - val_accuracy: 0.3929
Epoch 3/10
16/16 [] - 2s 139ms/step - loss: 1.4882 - accuracy: 0.4201 - val_loss: 6.8453 - val_accuracy: 0.5357
Epoch 4/10
16/16 [] - 2s 135ms/step - loss: 1.1548 - accuracy: 0.5917 - val_loss: 6.8551 - val_accuracy: 0.3571
Epoch 5/10
16/16 [] - 2s 139ms/step - loss: 1.0376 - accuracy: 0.6267 - val_loss: 6.8421 - val_accuracy: 0.4286
Epoch 6/10
16/16 [] - 2s 136ms/step - loss: 1.0189 - accuracy: 0.5942 - val_loss: 6.8277 - val_accuracy: 0.5714
Epoch 7/10
16/16 [] - 2s 133ms/step - loss: 0.6873 - accuracy: 0.7761 - val_loss: 6.8382 - val_accuracy: 0.6429
Epoch 8/10
16/16 [] - 2s 128ms/step - loss: 0.3739 - accuracy: 0.9019 - val_loss: 6.8109 - val_accuracy: 0.5357
Epoch 9/10
16/16 [] - 2s 128ms/step - loss: 0.3761 - accuracy: 0.8547 - val_loss: 6.8101 - val_accuracy: 0.6429
Epoch 10/10
16/16 [] - 2s 129ms/step - loss: 0.1258 - accuracy: 0.9713 - val_loss: 6.7796 - val_accuracy: 0.8929六、模型评估
acc history.history[accuracy]
val_acc history.history[val_accuracy]loss history.history[loss]
val_loss history.history[val_loss]epochs_range range(epochs)plt.figure(figsize(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, labelTraining Accuracy)
plt.plot(epochs_range, val_acc, labelValidation Accuracy)
plt.legend(loclower right)
plt.title(Training and Validation Accuracy)plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, labelTraining Loss)
plt.plot(epochs_range, val_loss, labelValidation Loss)
plt.legend(locupper right)
plt.title(Training and Validation Loss)
plt.show()七、保存and加载模型
# 保存模型
model.save(model/my_model.h5)
# 加载模型
new_model keras.models.load_model(model/my_model.h5)八、预测
# 采用加载的模型new_model来看预测结果plt.figure(figsize(10, 5)) # 图形的宽为10高为5for images, labels in val_ds.take(1):for i in range(8):ax plt.subplot(2, 4, i 1) # 显示图片plt.imshow(images[i])# 需要给图片增加一个维度img_array tf.expand_dims(images[i], 0) # 使用模型预测图片中的人物predictions new_model.predict(img_array)plt.title(class_names[np.argmax(predictions)])plt.axis(off)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911535.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!