南宁网站建设服务商前海网站建设

当前位置: 首页 > news >正文

南宁网站建设服务商,前海网站建设,网站装修怎么做,岳阳做网站公司文章目录 前期工作1. 设置GPU#xff08;如果使用的是CPU可以忽略这步#xff09;我的环境#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作

  1. 设置GP… 文章目录 前期工作1. 设置GPU如果使用的是CPU可以忽略这步我的环境 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作

  2. 设置GPU如果使用的是CPU可以忽略这步 我的环境 语言环境Python3.6.5编译器jupyter notebook深度学习环境TensorFlow2.4.1 import tensorflow as tfgpus tf.config.list_physical_devices(GPU)if gpus:gpu0 gpus[0] #如果有多个GPU仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0],GPU)2. 导入数据 import matplotlib.pyplot as plt 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. 查看数据 数据集一共分为cloudy、rain、shine、sunrise四类分别存放于weather_photos文件夹中以各自名字命名的子文件夹中。 image_count len(list(data_dir.glob(/.jpg)))print(图片总数为,image_count)roses list(data_dir.glob(sunrise/*.jpg)) PIL.Image.open(str(roses[0]))二、数据预处理

  3. 加载数据 使用image_dataset_from_directory方法将磁盘中的数据加载到tf.data.Dataset中 batch_size 32 img_height 180 img_width 180train_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsettraining,seed123,image_size(img_height, img_width),batch_sizebatch_size)Found 1125 files belonging to 4 classes. Using 900 files for training.val_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsetvalidation,seed123,image_size(img_height, img_width),batch_sizebatch_size)Found 1125 files belonging to 4 classes. Using 225 files for validation.我们可以通过class_names输出数据集的标签。标签将按字母顺序对应于目录名称。 class_names train_ds.class_names print(class_names)[cloudy, rain, shine, sunrise]2. 可视化数据 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)3. 再次检查数据 for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break(32, 180, 180, 3) (32,)Image_batch是形状的张量32,180,180,3。这是一批形状180x180x3的32张图片最后一维指的是彩色通道RGB。Label_batch是形状32的张量这些标签对应32张图片

  4. 配置数据集 AUTOTUNE tf.data.AUTOTUNEtrain_ds train_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE) val_ds val_ds.cache().prefetch(buffer_sizeAUTOTUNE)三、构建CNN网络 卷积神经网络CNN的输入是张量 (Tensor) 形式的 (image_height, image_width, color_channels)包含了图像高度、宽度及颜色信息。不需要输入batch size。color_channels 为 (R,G,B) 分别对应 RGB 的三个颜色通道color channel。在此示例中我们的 CNN 输入fashion_mnist 数据集中的图片形状是 (28, 28, 1)即灰度图像。我们需要在声明第一层时将形状赋值给参数input_shape。 num_classes 4model models.Sequential([layers.experimental.preprocessing.Rescaling(1./255, input_shape(img_height, img_width, 3)),layers.Conv2D(16, (3, 3), activationrelu, input_shape(img_height, img_width, 3)), # 卷积层1卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层12*2采样layers.Conv2D(32, (3, 3), activationrelu), # 卷积层2卷积核3*3layers.AveragePooling2D((2, 2)), # 池化层22*2采样layers.Conv2D(64, (3, 3), activationrelu), # 卷积层3卷积核3*3layers.Dropout(0.3), layers.Flatten(), # Flatten层连接卷积层与全连接层layers.Dense(128, activationrelu), # 全连接层特征进一步提取layers.Dense(num_classes) # 输出层输出预期结果 ])model.summary() # 打印网络结构Model: sequential


    Layer (type) Output Shape Param # rescaling (Rescaling) (None, 180, 180, 3) 0


    conv2d (Conv2D) (None, 178, 178, 16) 448


    average_pooling2d (AveragePo (None, 89, 89, 16) 0


    conv2d_1 (Conv2D) (None, 87, 87, 32) 4640


    average_pooling2d_1 (Average (None, 43, 43, 32) 0


    conv2d_2 (Conv2D) (None, 41, 41, 64) 18496


    dropout (Dropout) (None, 41, 41, 64) 0


    flatten (Flatten) (None, 107584) 0


    dense (Dense) (None, 128) 13770880


    dense_1 (Dense) (None, 5) 645 Total params: 13,795,109 Trainable params: 13,795,109 Non-trainable params: 0 _________________________________________________________________四、编译 在准备对模型进行训练之前还需要再对其进行一些设置。以下内容是在模型的编译步骤中添加的 损失函数loss用于衡量模型在训练期间的准确率。优化器optimizer决定模型如何根据其看到的数据和自身的损失函数进行更新。指标metrics用于监控训练和测试步骤。以下示例使用了准确率即被正确分类的图像的比率。

    设置优化器

    opt tf.keras.optimizers.Adam(learning_rate0.001) model.compile(optimizeropt,losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue),metrics[accuracy])五、训练模型 epochs 10 history model.fit(train_ds,validation_dataval_ds,epochsepochs )Epoch 110 2929 [] - 6s 58ms/step - loss: 1.5865 - accuracy: 0.4463 - val_loss: 0.5837 - val_accuracy: 0.7689 Epoch 210 2929 [] - 0s 12ms/step - loss: 0.5289 - accuracy: 0.8295 - val_loss: 0.5405 - val_accuracy: 0.8133 Epoch 310 2929 [] - 0s 12ms/step - loss: 0.2930 - accuracy: 0.8967 - val_loss: 0.5364 - val_accuracy: 0.8000 Epoch 410 2929 [] - 0s 12ms/step - loss: 0.2742 - accuracy: 0.9074 - val_loss: 0.4034 - val_accuracy: 0.8267 Epoch 510 2929 [] - 0s 11ms/step - loss: 0.1952 - accuracy: 0.9383 - val_loss: 0.3874 - val_accuracy: 0.8844 Epoch 610 2929 [] - 0s 11ms/step - loss: 0.1592 - accuracy: 0.9468 - val_loss: 0.3680 - val_accuracy: 0.8756 Epoch 710 2929 [] - 0s 12ms/step - loss: 0.0836 - accuracy: 0.9755 - val_loss: 0.3429 - val_accuracy: 0.8756 Epoch 810 2929 [] - 0s 12ms/step - loss: 0.0943 - accuracy: 0.9692 - val_loss: 0.3836 - val_accuracy: 0.9067 Epoch 910 2929 [] - 0s 12ms/step - loss: 0.0344 - accuracy: 0.9909 - val_loss: 0.3578 - val_accuracy: 0.9067 Epoch 1010 2929 [] - 0s 11ms/step - loss: 0.0950 - accuracy: 0.9708 - val_loss: 0.4710 - val_accuracy: 0.8356六、模型评估 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()