怎么用手机做网站编辑,小程序制作需要什么,网站后台设置,建筑人才网下载一、学习背景 由于工作的原因#xff0c;需要开展人工智能相关的研究#xff0c;虽然不用参与实际研发#xff0c;但在项目实施过程中发现#xff0c;人工智能的项目和普通程序开发项目不一样#xff0c;门槛比较高#xff0c;没有相关基础没法搞清楚人力、财力如何投入需要开展人工智能相关的研究虽然不用参与实际研发但在项目实施过程中发现人工智能的项目和普通程序开发项目不一样门槛比较高没有相关基础没法搞清楚人力、财力如何投入很难合理管控成本以及时间。为搞清楚情况老年博主决定一步一个脚印好好自学。在写本文时博主已学到一定阶段了趁有时间通过博文记录下来以免遗忘。 二、学习准备 常年的学习告诉我们一门学科要快速入门主流方式是看网络教学视频B站上有很多优质视频。但博主还是习惯静静看书通过CSDN读书频道浏览一并人工智能入门书籍最后选择了一本合适自己学习习惯的书书名为《神经网络与深度学习PythonKerasTensorFlow》2019年出版。PS2023年才学确实落后了呀。 看书先看目录结合自己的学习需求从目录来看需要重点看的是以下几点 第一章神经网络初体验 这章主要是介绍神经网络应用的案例改变读者固有的一些思维方式了解人工智能是怎么运作的不仅是代码层面看完还是很有收获的。 第二章第三章深度学习中的微积分基础和线性代数基础 第二、三两章非常重要主要介绍神经网络的数理基础。以前在大学总认为微积分和线性代数和自己没啥关系看完本章后感觉这些数理知识学的远远不够内心默默感叹数学真是科技进步之本。第二章核心知识点主要是函数求导、间套函数的链式求导法则、多变量函数与偏导数、求函数最小值第三章的核心知识点主要是矩阵运算、张量。 第四章神经网络的理论基础 本章是本书的核心主要介绍人工智能的核心算法包括激活函数、神经网络中的矩阵运算、反向传播算法和梯度下降算法必须认真看懂弄透不然后面几章估计就无法阅读了。 第五章用Python从零实现识别手写数字的神经网络 本章主要介绍如何使用Python代码来实现第四章算法以加深神经网络算法的认识同时提高动手能力博主反复把书中代码练习数遍才逐渐理解其中某些细节和原理。本章的核心内容是使用Python代码构建神经网络框架、使用Python代码实现网络迭代训练功能、使用Pyhon代码识别手写数字图片。 第七章使用神经网络实现机器视觉识别 由于博主想入门的是视觉类识别技术所以主要看了第七章往后的章节没有细看。本章逐节揭秘卷积网络的底层原理核心内容主要包括卷积神经网络应用、预训练卷积神经网络应用、卷积神经网络原理。 三、自己完整写完第一份图像识别代码
本书第七章的7.2小节为从零开始构造一个识别猫、狗图片的卷积网络是一个图像识别入门例子难度不高适合博主这种小白一步一步根书敲代码。当然复刻书中代码的过程是曲折的运行时经常碰到各种报错书本也有不少笔误之处。经过反复调试程序和查阅报错相关资料逐项问题解决后图像识别程序终于成功运行起来。
接下来将介绍本小白是如何一步步把程序跑起来的真是好多坑o(╥﹏╥)o。
第一步把书中代码直接Copy到IDE尝试运行 这步操作简单把以下完整代码Copy到IDE本人用的是Pycharm点击运行。本文使用的代码经测试可以运行而且每一步都添加了自己写的备注可能比原书还清晰。 import os
os.environ[CUDA_VISIBLE_DEVICES]0
# 加载训练数据集和测试数据集
# 1.拼接数据集的地址
base_dir D:\RGZN\第7章\cat-and-dog
train_cats_dir os.path.join(base_dir, training_set/cats)
train_dogs_dir os.path.join(base_dir, training_set/dogs)
test_cats_dir os.path.join(base_dir, test_set/cats)
test_dogs_dir os.path.join(base_dir, test_set/dogs)
# 2.显示两个数据集中的图片数量
print(total trainning cat images: , len(os.listdir(train_cats_dir)))
print(total trainning dog images: , len(os.listdir(train_dogs_dir)))
print(total testing cat images: , len(os.listdir(test_cats_dir)))
print(total testing dog images: , len(os.listdir(test_dogs_dir)))from keras import layers
from keras import modelsmodel models.Sequential()
# 3.Sequential是用于构建和训练顺序模型
model.add(layers.Conv2D(32, (3, 3), activationrelu, input_shape(150, 150, 3)))
# 4.32个神经元卷积核大小为3*3,激活函数为relu
# 5.150px*150px的图片,RGB(255,255,255)彩色像素所以接入层的格式是(150,150,3)
model.add(layers.MaxPooling2D((2, 2)))
# 6.2D最大池化层池化窗口大小为(2,2)
model.add(layers.Conv2D(64, (3, 3), activationrelu))
# 7.64个神经元卷积核大小为3*3,激活函数为relu
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activationrelu))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activationrelu))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
# 8.将上面网络输出的多维数组压平成一维数组
model.add(layers.Dense(512, activationrelu))
# 9.512个神经元全连接激活函数为relu
model.add(layers.Dense(1, activationsigmoid))
# 10.网络只要做出判断因此最后一层只需要一个神经元激活函数sigmoid根据它输出的值是否大于0.5来决定图片是猫还是狗
model.compile(lossbinary_crossentropy, optimizerrmsprop, metrics[acc])
# 11.model.compile()函数被设计为一个编译器用于将模型的图形结构定义与计算引擎进行链接以实现优化、损失函数的选择和训练过程的配置
model.summary()from keras import preprocessing
from keras.utils import image_utils
import numpy as np# 12.将图片地址加载到程序path_cats和path_dogs中
path_cats []
for path in os.listdir(train_cats_dir):if .jpg in path:path_cats.append(os.path.join(train_cats_dir, path))
path_dogs []
for path in os.listdir(train_dogs_dir):if .jpg in path:path_dogs.append(os.path.join(train_dogs_dir, path))
# 13.将图片转换为(150,150)格式的二维数组
training_set np.zeros((6000, 150, 150, 3), dtypefloat32)
# 14.np.zeros() 函数是 NumPy 库中的一个非常基础和广泛使用的函数它的主要功能是创建一个特定形状和类型的新数组其中所有元素的初始值都为 0。
train_dog_imgs 3000
train_cat_imgs 3000
for i in range(0, train_dog_imgs):img image_utils.load_img(path_dogs[i], target_size(150, 150))# 15.preprocessingkeras的预处理类training_set[i] image_utils.img_to_array(img)
for j in range(0, train_cat_imgs):img image_utils.load_img(path_cats[j], target_size(150, 150))training_set[train_dog_imgs j] image_utils.img_to_array(img)
# 16.准备2000张图片作为网络训练校验集
validation_set np.zeros((2000, 150, 150, 3), dtypefloat32)
validation_dog_imgs 1000
validation_cat_imgs 1000
# 17.其中用于校验的狗图片1000张校验猫的图片1000张
for i in range(validation_dog_imgs):path path_dogs[i train_dog_imgs]img image_utils.load_img(path, target_size(150, 150))validation_set[i] image_utils.img_to_array(img)
for j in range(validation_cat_imgs):path path_cats[i train_cat_imgs]img image_utils.load_img(path, target_size(150, 150))validation_set[j validation_dog_imgs] image_utils.img_to_array(img)train_labels np.zeros((3000,))
# 18.对前面3000张狗图片打标签0
train_labels np.concatenate((train_labels, np.ones(3000, )))
# 19.对后面3000张猫图片打标签1并进行合并操作形成6000张标签
validation_labels np.zeros((1000,))
# 20.对前面1000只狗的校验图片打标签0
validation_labels np.concatenate((validation_labels, np.ones(1000, )))
# 21.对后面1000只猫的校验图片打标签1并进行合并操作形成2000张标签
train_datagen preprocessing.image.ImageDataGenerator(rescale1. / 255)
# 22.将图片像素点转换到[0,1]之间可以使用keras.preprocessing.image.ImageDataGenerator生成器对数据进行变换和增强
train_generator train_datagen.flow(training_set, train_labels, batch_size32)
# 23.根据生成器设置的相关参数调用flow来执行batch_size:整数或None。每个梯度更新用到的的样本数量。
validation_generator train_datagen.flow(validation_set, validation_labels, batch_size32)history model.fit(train_generator, steps_per_epoch100, epochs30,validation_steps50, validation_datavalidation_generator)
# 24.启动网络训练循环训练30次每次训练从数据生成器中获取100张图片校验时从生成器中获取50张图片import matplotlib.pyplot as plt# 25.获取训练结果例如训练数据准确率、校验数据准确率等
acc history.history[acc]
val_acc history.history[val_acc]
loss history.history[loss]
val_loss history.history[val_loss]
epochs range(1, len(acc) 1)
# 26.将训练过程中的准确性变化绘制出来
plt.plot(epochs, acc, bo, labelTraining acc)
plt.plot(epochs, val_acc, b, labelValidation acc)
plt.title(Training and validation accuracy)
plt.legend()
plt.figure()
# 27将训练过程中的损失变化绘制出来
plt.plot(epochs, loss, bo, labelTraining loss)
plt.plot(epochs, val_loss, b, labelValidation loss)
plt.title(Training and validation loss)
plt.legend()
plt.show()
第二步发现依赖包未导入根据报错导入相关的包 copy代码后会发现各种包比如keras等未导入凡提示没有的使用pip安装导入即可。 第三步发现数据集没下载根据书中链接下载 第一坑这里发现原书地址不可用经过大量网站检索本小白终于完成数据集下载但在写本文章时该书官网貌似出问题了晕倒_(¦3」∠)_。由于数据集太大后期再放下载链接。 以下是数据集cat-and-dog截图
第四步模型训练 第二坑缺少数据集的问题解决后程序便可正常运行。谁知笔记本第十代 intel i7 CPU跑了大半天才出训练结果遂改GPU试试结果手提没有英伟达独显后来又研究外接显卡终于解决CPU训练太慢的问题。这笔记本电脑雷电3接口外接二手GTX1060显卡跑人工智能深度学习训练模型解决方案够博主另外写一篇长文了外接显卡方案从购置、安装、调式到运行前前后后花了约三周时间这里就不作详细解释了最后结论是此方案可行比CPU快几十倍。 若需使用电脑GPU在程序开头加入以下代码即可。
os.environ[CUDA_VISIBLE_DEVICES]0除此之外还有显卡驱动、CUDA、cuDNN等要安装相关安装教程可参考以下链接。 《在keras中使用gpu加速训练模型》 这篇文章教你如何下载和安装相关驱动程序。 《CUDA11.8安装tensorflow2.12找不到GPU问题解决办法》这篇文章教你如何保证各种驱动版本一致。
四、模型训练效果
模型训练效果直接上图效果如下 [1]陈屹. 神经网络与深度学习实战PythonKerasTensorFlow[M]. 北京机械工业出版社2019.