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

编程网站开发培训网站关键词重要吗

编程网站开发培训,网站关键词重要吗,赣州建设信息网,app建设网站公司哪家好目录 1. 说明2. 猫狗大战2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存2.7 模型训练结果的可视化 3. 猫狗大战的CNN模型可视化结果图4. 完整代码5. 猫狗大战的迁移学习 1. 说明 本篇文章是CNN的另外一个例子#xff0c;猫狗大战#xff0c… 目录 1. 说明2. 猫狗大战2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存2.7 模型训练结果的可视化 3. 猫狗大战的CNN模型可视化结果图4. 完整代码5. 猫狗大战的迁移学习 1. 说明 本篇文章是CNN的另外一个例子猫狗大战是自制数据集的例子。之前的例子都是python中库自带的但是这次的例子是自己搜集数据集如下图所示整理数据集的链接会放在评论区。 2. 猫狗大战 2.1 导入相关库 以下第三方库是python专门用于深度学习的库 from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten, Dropout, BatchNormalization from keras.optimizers import RMSprop, Adam from keras.preprocessing.image import ImageDataGenerator import sys, os # 目录结构 from keras.layers import MaxPool2D import matplotlib.pyplot as plt import pandas from keras.callbacks import EarlyStopping, ReduceLROnPlateau2.2 建立模型 这是采用另外一种书写方式建立模型。 构建了三层卷积层三层池化层然后是展平层(将二维特征图拉直输入给全连接层)然后是三层全连接层并且加入了dropout层。 1.模型建立 # 1.卷积层输入图片大小(150, 150, 3), 卷积核个数16,卷积核大小(5, 5), 激活函数relu conv_layer1 Conv2D(input_shape(150, 150, 3), filters16, kernel_size(5, 5), activationrelu) # 2.最大池化层池化层大小(2, 2), 步长为2 max_pool1 MaxPool2D(pool_size(2, 2), strides2) # 3.卷积层卷积核个数32,卷积核大小(5, 5), 激活函数relu conv_layer2 Conv2D(filters32, kernel_size(5, 5), activationrelu) # 4.最大池化层池化层大小(2, 2), 步长为2 max_pool2 MaxPool2D(pool_size(2, 2), strides2) # 5.卷积层卷积核个数64,卷积核大小(5, 5), 激活函数relu conv_layer3 Conv2D(filters64, kernel_size(5, 5), activationrelu) # 6.最大池化层池化层大小(2, 2), 步长为2 max_pool3 MaxPool2D(pool_size(2, 2), strides2) # 7.卷积层卷积核个数128,卷积核大小(5, 5), 激活函数relu conv_layer4 Conv2D(filters128, kernel_size(5, 5), activationrelu) # 8.最大池化层池化层大小(2, 2), 步长为2 max_pool4 MaxPool2D(pool_size(2, 2), strides2) # 9.展平层 flatten_layer Flatten() # 10.Dropout层, Dropout(0.2) third_dropout Dropout(0.2) # 11.全连接层/隐藏层1240个节点, 激活函数relu hidden_layer1 Dense(240, activationrelu) # 12.全连接层/隐藏层284个节点, 激活函数relu hidden_layer3 Dense(84, activationrelu) # 13.Dropout层, Dropout(0.2) fif_dropout Dropout(0.5) # 14.输出层输出节点个数1, 激活函数sigmoid output_layer Dense(1, activationsigmoid) model Sequential([conv_layer1, max_pool1, conv_layer2, max_pool2,conv_layer3, max_pool3, conv_layer4, max_pool4,flatten_layer, third_dropout, hidden_layer1,hidden_layer3, fif_dropout, output_layer])2.3 模型编译 模型的优化器是Adam学习率是0.01, 损失函数是binary_crossentropy二分类交叉熵 性能指标是正确率accuracy 另外还加入了回调机制。 回调机制简单理解为训练集的准确率持续上升而验证集准确率基本不变此时已经出现过拟合应该调制学习率让验证集的准确率也上升。 2.模型编译 # 模型编译2分类binary_crossentropy model.compile(optimizerAdam(lr0.0001), # 优化器选择Adam初始学习率设置为0.0001lossbinary_crossentropy, # 代价函数选择 binary_crossentropymetrics[accuracy]) # 设置指标为准确率 model.summary() # 模型统计# 回调机制 动态调整学习率 reduce ReduceLROnPlateau(monitorval_accuracy, # 设置监测的值为val_accuracypatience2, # 设置耐心容忍次数为2verbose1, #factor0.5, # 缩放学习率的值为0.5学习率将以lr lr*factor的形式被减少min_lr0.000001 # 学习率最小值0.000001) # 监控val_accuracy增加趋势2.4 数据生成器 加载自制数据集 利用数据生成器对数据进行数据加强即每次训练时输入的图片会是原图片的翻转平移旋转缩放这样是为了降低过拟合的影响。 然后通过迭代器进行数据加载目标图像大小统一尺寸1501503设置每次加载到训练网络的图像数目设置而分类模型(默认one-hot编码)并且数据打乱。 3.数据生成器 # 生成器对象1: 归一化 gen ImageDataGenerator(rescale1 / 255.0) # 生成器对象2: 归一化 数据加强 gen1 ImageDataGenerator(rescale1 / 255.0,rotation_range5, # 图片随机旋转的角度5度width_shift_range0.1,height_shift_range0.1, # 水平和竖直方向随机移动0.1shear_range0.1, # 剪切变换的程度0.1zoom_range0.1, # 随机放大的程度0.1fill_modenearest) # 当需要进行像素填充时选择最近的像素进行填充 # 拼接训练和验证的两个路径 train_path os.path.join(sys.path[0], dog-cats, train) val_path os.path.join(sys.path[0], dog-cats, val) print(训练数据路径 , train_path) print(验证数据路径: , val_path) # 训练和验证的两个迭代器 train_iter gen1.flow_from_directory(train_path, # 训练train目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size8, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱 val_iter gen.flow_from_directory(val_path, # 测试val目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size8, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱2.5 模型训练 模型训练的次数是20,每1次循环进行测试 4.模型训练 # 模型的训练 model.fit result model.fit(train_iter, # 设置训练数据的迭代器epochs20, # 循环次数20次validation_dataval_iter, # 验证数据的迭代器callbacks[reduce], # 回调机制设置为reduceverbose1)2.6 模型保存 以.h5文件格式保存模型 5.模型保存 # 保存训练好的模型 model.save(my_cnn_cat_dog.h5)2.7 模型训练结果的可视化 对模型的训练结果进行可视化可视化的结果用曲线图的形式展现 6.模型训练时的可视化 # 显示训练集和验证集的acc和loss曲线 acc result.history[accuracy] # 获取模型训练中的accuracy val_acc result.history[val_accuracy] # 获取模型训练中的val_accuracy loss result.history[loss] # 获取模型训练中的loss val_loss result.history[val_loss] # 获取模型训练中的val_loss # 绘值acc曲线 plt.figure(1) plt.plot(acc, labelTraining Accuracy) plt.plot(val_acc, labelValidation Accuracy) plt.title(Training and Validation Accuracy) plt.legend() plt.savefig(cat_dog_acc.png, dpi600) # 绘制loss曲线 plt.figure(2) plt.plot(loss, labelTraining Loss) plt.plot(val_loss, labelValidation Loss) plt.title(Training and Validation Loss) plt.legend() plt.savefig(cat_dog_loss.png, dpi600) plt.show() # 将结果显示出来3. 猫狗大战的CNN模型可视化结果图 Epoch 1/20 250/250 [] - 59s 231ms/step - loss: 0.6940 - accuracy: 0.4925 - val_loss: 0.6899 - val_accuracy: 0.5050 - lr: 1.0000e-04 Epoch 2/20 250/250 [] - 55s 219ms/step - loss: 0.6891 - accuracy: 0.5125 - val_loss: 0.6787 - val_accuracy: 0.5880 - lr: 1.0000e-04 Epoch 3/20 250/250 [] - 54s 216ms/step - loss: 0.6791 - accuracy: 0.5840 - val_loss: 0.6655 - val_accuracy: 0.6080 - lr: 1.0000e-04 Epoch 4/20 250/250 [] - 60s 238ms/step - loss: 0.6628 - accuracy: 0.6040 - val_loss: 0.6501 - val_accuracy: 0.6300 - lr: 1.0000e-04 Epoch 5/20 250/250 [] - 57s 226ms/step - loss: 0.6480 - accuracy: 0.6400 - val_loss: 0.6281 - val_accuracy: 0.6590 - lr: 1.0000e-04 Epoch 6/20 250/250 [] - 67s 268ms/step - loss: 0.6275 - accuracy: 0.6565 - val_loss: 0.6160 - val_accuracy: 0.6690 - lr: 1.0000e-04 Epoch 7/20 250/250 [] - 62s 247ms/step - loss: 0.6252 - accuracy: 0.6570 - val_loss: 0.6026 - val_accuracy: 0.6790 - lr: 1.0000e-04 Epoch 8/20 250/250 [] - 63s 251ms/step - loss: 0.5915 - accuracy: 0.6770 - val_loss: 0.5770 - val_accuracy: 0.6960 - lr: 1.0000e-04 Epoch 9/20 250/250 [] - 57s 228ms/step - loss: 0.5778 - accuracy: 0.6930 - val_loss: 0.5769 - val_accuracy: 0.6880 - lr: 1.0000e-04 Epoch 10/20 250/250 [] - 55s 219ms/step - loss: 0.5532 - accuracy: 0.7085 - val_loss: 0.5601 - val_accuracy: 0.6970 - lr: 1.0000e-04 Epoch 11/20 250/250 [] - 55s 221ms/step - loss: 0.5408 - accuracy: 0.7370 - val_loss: 0.6002 - val_accuracy: 0.6810 - lr: 1.0000e-04 Epoch 12/20 250/250 [] - ETA: 0s - loss: 0.5285 - accuracy: 0.7350 Epoch 12: ReduceLROnPlateau reducing learning rate to 4.999999873689376e-05. 250/250 [] - 56s 226ms/step - loss: 0.5285 - accuracy: 0.7350 - val_loss: 0.5735 - val_accuracy: 0.6960 - lr: 1.0000e-04 Epoch 13/20 250/250 [] - 70s 280ms/step - loss: 0.4969 - accuracy: 0.7595 - val_loss: 0.5212 - val_accuracy: 0.7410 - lr: 5.0000e-05 Epoch 14/20 250/250 [] - 73s 292ms/step - loss: 0.4776 - accuracy: 0.7740 - val_loss: 0.5146 - val_accuracy: 0.7470 - lr: 5.0000e-05 Epoch 15/20 250/250 [] - 71s 285ms/step - loss: 0.4605 - accuracy: 0.7930 - val_loss: 0.5180 - val_accuracy: 0.7530 - lr: 5.0000e-05 Epoch 16/20 250/250 [] - 74s 298ms/step - loss: 0.4619 - accuracy: 0.7825 - val_loss: 0.5100 - val_accuracy: 0.7510 - lr: 5.0000e-05 Epoch 17/20 250/250 [] - 72s 289ms/step - loss: 0.4558 - accuracy: 0.7885 - val_loss: 0.4991 - val_accuracy: 0.7630 - lr: 5.0000e-05 Epoch 18/20 250/250 [] - 75s 300ms/step - loss: 0.4498 - accuracy: 0.7900 - val_loss: 0.4966 - val_accuracy: 0.7580 - lr: 5.0000e-05 Epoch 19/20 250/250 [] - 61s 243ms/step - loss: 0.4269 - accuracy: 0.8060 - val_loss: 0.5000 - val_accuracy: 0.7690 - lr: 5.0000e-05 Epoch 20/20 250/250 [] - 56s 224ms/step - loss: 0.4202 - accuracy: 0.8090 - val_loss: 0.4845 - val_accuracy: 0.7700 - lr: 5.0000e-05 从以上结果可知模型的准确率达到了77%。可以发现并不是很高因此采用下面的迁移学习。 4. 完整代码 from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten, Dropout, BatchNormalization from keras.optimizers import RMSprop, Adam from keras.preprocessing.image import ImageDataGenerator import sys, os # 目录结构 from keras.layers import MaxPool2D import matplotlib.pyplot as plt import pandas from keras.callbacks import EarlyStopping, ReduceLROnPlateau1.模型建立 # 1.卷积层输入图片大小(150, 150, 3), 卷积核个数16,卷积核大小(5, 5), 激活函数relu conv_layer1 Conv2D(input_shape(150, 150, 3), filters16, kernel_size(5, 5), activationrelu) # 2.最大池化层池化层大小(2, 2), 步长为2 max_pool1 MaxPool2D(pool_size(2, 2), strides2) # 3.卷积层卷积核个数32,卷积核大小(5, 5), 激活函数relu conv_layer2 Conv2D(filters32, kernel_size(5, 5), activationrelu) # 4.最大池化层池化层大小(2, 2), 步长为2 max_pool2 MaxPool2D(pool_size(2, 2), strides2) # 5.卷积层卷积核个数64,卷积核大小(5, 5), 激活函数relu conv_layer3 Conv2D(filters64, kernel_size(5, 5), activationrelu) # 6.最大池化层池化层大小(2, 2), 步长为2 max_pool3 MaxPool2D(pool_size(2, 2), strides2) # 7.卷积层卷积核个数128,卷积核大小(5, 5), 激活函数relu conv_layer4 Conv2D(filters128, kernel_size(5, 5), activationrelu) # 8.最大池化层池化层大小(2, 2), 步长为2 max_pool4 MaxPool2D(pool_size(2, 2), strides2) # 9.展平层 flatten_layer Flatten() # 10.Dropout层, Dropout(0.2) third_dropout Dropout(0.2) # 11.全连接层/隐藏层1240个节点, 激活函数relu hidden_layer1 Dense(240, activationrelu) # 12.全连接层/隐藏层284个节点, 激活函数relu hidden_layer3 Dense(84, activationrelu) # 13.Dropout层, Dropout(0.2) fif_dropout Dropout(0.5) # 14.输出层输出节点个数1, 激活函数sigmoid output_layer Dense(1, activationsigmoid) model Sequential([conv_layer1, max_pool1, conv_layer2, max_pool2,conv_layer3, max_pool3, conv_layer4, max_pool4,flatten_layer, third_dropout, hidden_layer1,hidden_layer3, fif_dropout, output_layer]) 2.模型编译 # 模型编译2分类binary_crossentropy model.compile(optimizerAdam(lr0.0001), # 优化器选择Adam初始学习率设置为0.0001lossbinary_crossentropy, # 代价函数选择 binary_crossentropymetrics[accuracy]) # 设置指标为准确率 model.summary() # 模型统计# 回调机制 动态调整学习率 reduce ReduceLROnPlateau(monitorval_accuracy, # 设置监测的值为val_accuracypatience2, # 设置耐心容忍次数为2verbose1, #factor0.5, # 缩放学习率的值为0.5学习率将以lr lr*factor的形式被减少min_lr0.000001 # 学习率最小值0.000001) # 监控val_accuracy增加趋势 3.数据生成器 # 生成器对象1: 归一化 gen ImageDataGenerator(rescale1 / 255.0) # 生成器对象2: 归一化 数据加强 gen1 ImageDataGenerator(rescale1 / 255.0,rotation_range5, # 图片随机旋转的角度5度width_shift_range0.1,height_shift_range0.1, # 水平和竖直方向随机移动0.1shear_range0.1, # 剪切变换的程度0.1zoom_range0.1, # 随机放大的程度0.1fill_modenearest) # 当需要进行像素填充时选择最近的像素进行填充 # 拼接训练和验证的两个路径 train_path os.path.join(sys.path[0], dog-cats, train) val_path os.path.join(sys.path[0], dog-cats, val) print(训练数据路径 , train_path) print(验证数据路径: , val_path) # 训练和验证的两个迭代器 train_iter gen1.flow_from_directory(train_path, # 训练train目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size8, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱 val_iter gen.flow_from_directory(val_path, # 测试val目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size8, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱 4.模型训练 # 模型的训练 model.fit result model.fit(train_iter, # 设置训练数据的迭代器epochs20, # 循环次数20次validation_dataval_iter, # 验证数据的迭代器callbacks[reduce], # 回调机制设置为reduceverbose1)5.模型保存 # 保存训练好的模型 model.save(my_cnn_cat_dog.h5)6.模型训练时的可视化 # 显示训练集和验证集的acc和loss曲线 acc result.history[accuracy] # 获取模型训练中的accuracy val_acc result.history[val_accuracy] # 获取模型训练中的val_accuracy loss result.history[loss] # 获取模型训练中的loss val_loss result.history[val_loss] # 获取模型训练中的val_loss # 绘值acc曲线 plt.figure(1) plt.plot(acc, labelTraining Accuracy) plt.plot(val_acc, labelValidation Accuracy) plt.title(Training and Validation Accuracy) plt.legend() plt.savefig(cat_dog_acc.png, dpi600) # 绘制loss曲线 plt.figure(2) plt.plot(loss, labelTraining Loss) plt.plot(val_loss, labelValidation Loss) plt.title(Training and Validation Loss) plt.legend() plt.savefig(cat_dog_loss.png, dpi600) plt.show() # 将结果显示出来 5. 猫狗大战的迁移学习 迁移学习简单来说就是将别人已经训练好的模型拿来自己用。 from keras.applications import DenseNet121 from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten, Dropout, BatchNormalization from keras.optimizers import RMSprop, Adam from keras.preprocessing.image import ImageDataGenerator import sys, os # 目录结构 from keras.layers import MaxPool2D import matplotlib.pyplot as plt import pandas from keras.callbacks import EarlyStopping, ReduceLROnPlateau1.模型建立 # 加载DenseNet网络模型并去掉最后一层全连接层最后一个池化层设置为max pooling net DenseNet121(weightsimagenet, include_topFalse, poolingmax) # 设计为不参与优化即MobileNet这部分参数固定不动 net.trainable False newnet Sequential([net, # 去掉最后一层的DenseNet121Dense(1024, activationrelu), # 追加全连接层BatchNormalization(), # 追加BN层Dropout(rate0.5), # 追加Dropout层防止过拟合Dense(1,activationsigmoid) # 根据宝可梦数据的任务设置最后一层输出节点数为5 ]) newnet.build(input_shape(None, 150, 150, 3))2.模型编译 newnet.compile(optimizerAdam(lr0.0001), lossbinary_crossentropy, metrics[accuracy]) newnet.summary()# 回调机制 动态调整学习率 reduce ReduceLROnPlateau(monitorval_accuracy, # 设置监测的值为val_accuracypatience2, # 设置耐心容忍次数为2verbose1, #factor0.5, # 缩放学习率的值为0.5学习率将以lr lr*factor的形式被减少min_lr0.000001 # 学习率最小值0.000001) # 监控val_accuracy增加趋势3.数据生成器 # 生成器对象1: 归一化 gen ImageDataGenerator(rescale1 / 255.0) # 生成器对象2: 归一化 数据加强 gen1 ImageDataGenerator(rescale1 / 255.0,rotation_range5, # 图片随机旋转的角度5度width_shift_range0.1,height_shift_range0.1, # 水平和竖直方向随机移动0.1shear_range0.1, # 剪切变换的程度0.1zoom_range0.1, # 随机放大的程度0.1fill_modenearest) # 当需要进行像素填充时选择最近的像素进行填充 # 拼接训练和验证的两个路径 train_path os.path.join(sys.path[0], dog-cats, train) val_path os.path.join(sys.path[0], dog-cats, val) print(训练数据路径 , train_path) print(验证数据路径: , val_path) # 训练和验证的两个迭代器 train_iter gen1.flow_from_directory(train_path, # 训练train目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size10, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱 val_iter gen.flow_from_directory(val_path, # 测试val目录路径target_size(150, 150), # 目标图像大小统一尺寸150batch_size10, # 设置每次加载到内存的图像大小class_modebinary, # 设置分类模型(默认one-hot编码)shuffleTrue) # 是否打乱 4.模型训练 # 模型的训练 newnet.fit result newnet.fit(train_iter, # 设置训练数据的迭代器epochs20, # 循环次数20次validation_dataval_iter, # 验证数据的迭代器callbacks[reduce], # 回调机制设置为reduceverbose1)5.模型保存 # 保存训练好的模型 newnet.save(my_cnn_cat_dog_3.h5)6.模型训练时的可视化 # 显示训练集和验证集的acc和loss曲线 acc result.history[accuracy] # 获取模型训练中的accuracy val_acc result.history[val_accuracy] # 获取模型训练中的val_accuracy loss result.history[loss] # 获取模型训练中的loss val_loss result.history[val_loss] # 获取模型训练中的val_loss # 绘值acc曲线 plt.figure(1) plt.plot(acc, labelTraining Accuracy) plt.plot(val_acc, labelValidation Accuracy) plt.title(Training and Validation Accuracy) plt.legend() plt.savefig(cat_dog_acc_3.png, dpi600) # 绘制loss曲线 plt.figure(2) plt.plot(loss, labelTraining Loss) plt.plot(val_loss, labelValidation Loss) plt.title(Training and Validation Loss) plt.legend() plt.savefig(cat_dog_loss_3.png, dpi600) plt.show() # 将结果显示出来 可以发现通过迁移学习之后的模型准确率达到了96%。
http://www.w-s-a.com/news/804999/

相关文章:

  • 安阳哪个公司做网站好企业没有做网站有的坏处
  • 网站开发有必要用php框架wordpress分页导航代码
  • wordpress建站seo鞍山制作网站哪家好
  • 网站空间流量查询上海门户网站制作
  • 网站开发技术是什么专业会的加强普法网站和普法网络集群建设
  • 上海建筑网站seo 推广
  • 乌兰察布做网站公司爱站网关键词挖掘工具站长工具
  • 白银网站建设白银申请网站空间怎么做
  • 免费炫酷网站模板网站建设需要用到什么软件有哪些
  • 电商网站开发 文献综述大型网站建设企业
  • 如何在建设部网站补录项目单仁牛商
  • 社保网站上做减员一直不审核软件程序开发
  • 网站友情链接购买天元建设集团有限公司资质
  • 南山商城网站建设哪家技术好株洲seo网站优化软件
  • 服务类网站建设18款禁用网站app直播
  • 电子商务网站建设需要物流网站开发公司
  • 网站的系统建设方式有哪些内容宁波网站建设公司
  • 网站开发 技术方案品牌建设总要求
  • 中卫网站建站设计seo专员的工作内容
  • h5商城网站是什么意思.net 网站开发框架
  • 西安网站改版的公司软件外包是什么意思
  • 网站建设了解眉山网站优化
  • 做网站用php还是node如何申请网站域名流程
  • 销售公司怎么做网站删除wordpress
  • 毕节网站怎么做seohtml代码特效银河系
  • 淄博品质网站建设网站引导页案例
  • 网站建设虚拟空间小豹子韬韬是哪个网站做的
  • 网络司网站如何建立公司网站建议和规则
  • 织梦网站模板后台密码找回企业vi设计公司性价比高
  • php 爬取网站所有链接传奇手游发布网站