人工智能应用导论(第三版)实验手册 6-4技能代码、6-5菜品识别_第1页
人工智能应用导论(第三版)实验手册 6-4技能代码、6-5菜品识别_第2页
人工智能应用导论(第三版)实验手册 6-4技能代码、6-5菜品识别_第3页
人工智能应用导论(第三版)实验手册 6-4技能代码、6-5菜品识别_第4页
人工智能应用导论(第三版)实验手册 6-4技能代码、6-5菜品识别_第5页
已阅读5页,还剩9页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目6技能代码实验手册3.4深度学习框架:TensorFlow2.0TensorFlow是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。【任务练习】实现MNIST数据集手写数字的识别,该项目是TensorFlow初学者快速入门的示例任务。具体参考代码如下:#导入TensorFlow包,并命名为tfimporttensorflowastf#载入并准备好MNIST数据集,并将样本从整数转换为浮点数mnist=tf.keras.datasets.mnist(x_train,y_train),(x_test,y_test)=mnist.load_data()x_train,x_test=x_train/255.0,x_test/255.0#将模型的各层堆叠起来,以搭建tf.keras.Sequential模型。model=tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28,28)),tf.keras.layers.Dense(128,activation='relu'),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10,activation='softmax')])#为训练选择优化器和损失函数pile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])#训练并验证模型model.fit(x_train,y_train,epochs=5)model.evaluate(x_test,y_test)3.5Keras实现基本图像分类基本图像分类开发主要包括图像采集、图像清洗、图像标注、模型选择、模型训练、模型评估、模型调用(预测)几个基本步骤。【任务练习】本项目将训练一个神经网络模型,对运动鞋和衬衫等服装图像进行分类。这里不理解所有细节也没关系;这只是对完整TensorFlow程序的快速概述,详细内容会在实际操作的同时进行介绍。本任务使用了tf.keras,它是TensorFlow中用来构建和训练模型的高级API。#TensorFlowandtf.kerasimporttensorflowastffromtensorflowimportkeras#Helperlibrariesimportnumpyasnpimportmatplotlib.pyplotasplt#导入FashionMNIST数据集fashion_mnist=keras.datasets.fashion_mnist(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()#定义每个图像与标签之间的映射关系class_names=['T-shirt/top','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankleboot']#图像预处理,将像素归一化缩小至0到1之间train_images=train_images/255.0test_images=test_images/255.0#构建模型#设置层model=keras.Sequential([keras.layers.Flatten(input_shape=(28,28)),keras.layers.Dense(128,activation='relu'),keras.layers.Dense(10)])#编译模型pile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])#训练模型#向模型馈送数据model.fit(train_images,train_labels,epochs=10)#评估准确率test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)print('\nTestaccuracy:',test_acc)#进行预测probability_model=tf.keras.Sequential([model,tf.keras.layers.Softmax()])predictions=probability_model.predict(test_images)#查看第一个预测结果print(predictions[0])#预测结果print(np.argmax(predictions[0]))#标签置信度3.6基于CNN的CIFAR10图像分类卷积神经网络(ConvolutionNeuralNetwork,CNN),又称为深度卷积神经网络,可以将其简单地理解为包含卷积操作且具有深度结构的网络,是通过权值共享和局部连接的方式,对数据进行特征提取,并进行预测的过程。卷积神经网络通过反馈修正卷积核和偏置参数使输出与预测间的偏差减小。构建卷积神经网络进行深度学习开发可以从四个方面展开:输入输出、网络结构、损失函数以及评价指标。卷积神经网络的基本结构由以下几个部分组成:输入层(InputLayer)、卷积层(ConvolutionLayer)、池化层(PoolingLayer)、激活函数层(ActivationFunctionLayer)和全连接层(Full-ConnectionLayer)。图6-9给出了一个三层卷积的CNN网络结构。图6-9三层卷积的CNN网络结构【任务练习】本任务展示如何训练一个简单的卷积神经网络(CNN)对CIFAR图像进行分类。本任务使用KerasSequentialAPI,创建和训练模型只需要几行代码。#导入TensorFlowimporttensorflowastffromtensorflow.kerasimportdatasets,layers,modelsimportmatplotlib.pyplotasplt#下载并准备CIFAR10数据集(train_images,train_labels),(test_images,test_labels)=datasets.cifar10.load_data()#Normalizepixelvaluestobebetween0and1train_images,test_images=train_images/255.0,test_images/255.0#验证数据class_names=['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']plt.figure(figsize=(10,10))foriinrange(25):plt.subplot(5,5,i+1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i])#TheCIFARlabelshappentobearrays,#whichiswhyyouneedtheextraindexplt.xlabel(class_names[train_labels[i][0]])plt.show()#构造卷积神经网络模型model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))model.add(layers.Flatten())model.add(layers.Dense(64,activation='relu'))#增加Dense层model.add(layers.Dense(10))#查看完整的模型架构model.summary()#编译并训练模型pile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])history=model.fit(train_images,train_labels,epochs=10,validation_data=(test_images,test_labels))#评估模型plt.plot(history.history['accuracy'],label='accuracy')plt.plot(history.history['val_accuracy'],label='val_accuracy')plt.xlabel('Epoch')plt.ylabel('Accuracy')plt.ylim([0.5,1])plt.legend(loc='lowerright')plt.show()test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)3.7OpenCV基础OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习库,可以运行在Linux、Windows、Android和MacOS操作系统上。提供了C++、Python、Ruby、MATLAB、C#、Ch、GO等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。其核心代码由一系列C函数和少量C++类构成,轻量且高效。OpenCV实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域研究最有力的工具,侧重于“处理”图像,如图像增强、还原、去噪、分割等等。可以解决的问题:人机交互、机器人视觉、运动跟踪、图像分类、人脸识别、物体识别、特征检测、视频分析、深度图像等。更多详细内容可查阅OpenCV官网。【任务练习】利用OpenCV将一张彩色图像转换为灰度图像,并将灰度图像存储起来。步骤一:图像读取按照灰度图的方式读入图像,cv2.imread函数的第二个参数选择cv2.IMREAD_GRAYSCALE;如果需要按照彩色图像读取,只需要在cv2.imread函数的第二个参数选择cv2.IMREAD_COLOR即可。importcv2img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)type(img),img.shape 输出结果如图6-10所示:图6-10图像输出结果从结果中我们可以看到,按照灰度图的方式读到的图像数组,其形状为二维的,如果按照彩色方式读取则是三维的,特别注意OpenCV处理图像颜色通道顺序是BGR(即蓝、绿、红)。步骤二:显示图像输入以下代码,并运行,显示效果如图6-11所示:cv2.imshow('IMG_GRAY',img)cv2.waitKey(0)cv2.destroyAllWindows()图6-11灰度方式读取图像并显示步骤三:存储图像输入以下代码,并运行,直接写文件名称,灰度文件将保存在工作路径下:cv2.imwrite('lena_gray.jpg',img) 在工作路径下查看lena_gray.jpg图片文件是否存在。菜品识别实验手册【项目目标】菜品识别是人工智能的运用在餐饮领域的一个重要突破,菜品识别是指通过计算机对菜品图像进行处理、分析和理解,以不同模式识别各种目标和物体,并对质量较差的图像进行一系列增强和重建技术,从而有效精准识别菜品图像质量的技术。本项目以“西安美食识别”为任务,展示如何训练一个简单的卷积神经网络(CNN)来对图像进行分类识别。具体目标包括:(1)掌握如何创建与拆分数据集;(2)掌握如何实现预处理图像数据;(3)了解如何构建卷积神经网络模型,并完成模型训练;(4)掌握如何使用已训练好的模型进行图像识别分类。任务一下载并创建数据集本实训提供了“西安美食”数据集food,该数据集包含23个类别1644张的彩色图像,其中1630张图像带标签,其余14张为待预测图像。创建工程“foodsRecognization”,将数据集“food”拷贝至工程文件夹下。新建卷积神经网络模型的python文件model.py,遍历带标签数据集train目录下的所有菜品及其标签:#导入包importosimportcv2importnumpyasnpdata=[]#存储菜品的原始图像,以备后续利用food_images=[]#存储菜品图像food_labels=[]#存储菜品标签N=23#N为菜品的种类数#遍历数据集下的所有菜品训练集foriinrange(N):forroot,dirs,filesinos.walk("food/train/"+str(i)):forfileinfiles:ifos.path.splitext(file)[1]=='.jpg':data.append(file)temp_image=cv2.imread(root+"/"+file)temp_image=cv2.resize(temp_image,(224,224))food_images.append(temp_image)food_labels.append(32(i))拆分数据集为训练集和测试集。其中:train_images和train_labels数组是训练集,用于模型的学习。test_images和test_labels数组是测试集,会被用来对模型进行测试。fromsklearnimportmodel_selection#拆分数据集train_images,test_images,train_labels,test_labels=\model_selection.train_test_split(food_images,food_labels,train_size=0.8,test_size=0.2)任务二数据预处理 在训练网络之前,必须对数据进行预处理。检查训练集中的图像,发现像素值处于0到255之间。将这些值除以255,使其缩小至0到1之间,然后将其馈送到神经网络模型。这里,务必以相同的方式对训练集和测试集进行预处理。train_images=np.array(train_images)train_images=train_images.reshape([-1,224,224,3])/255.0train_labels=np.array(train_labels)test_images=np.array(test_images)test_images=test_images.reshape([-1,224,224,3])/255.0test_labels=np.array(test_labels)任务三构建模型构建神经网络需要先配置模型的层,然后再编译模型。神经网络的基本组成部分是层,层会从向其馈送的数据中提取表示形式。大多数深度学习都包括将简单的层链接在一起。本网络包含两个卷积层Conv2D、两个池化MaxPooling2D层、一个展平Flatten层、两个全连接Dense层,最后用softmax输出23类。#导入Tensorflow,并命名为tfimporttensorflowastf#构建模型#设置层model=tf.keras.models.Sequential([tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(224,224,3)),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Conv2D(64,(3,3),activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation='relu'),tf.keras.layers.Dense(23,activation='softmax')])在准备对模型进行训练之前,还需要再对其进行一些设置,包括:损失函数:用于测量模型在训练期间的准确率。需要最小化此函数,以便将模型“引导”到正确的方向上;优化器:决定模型如何根据其看到的数据和自身的损失函数进行更新;评价指标:用于监控训练和测试步骤。这里使用了准确率,即被正确分类的比率。pile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['accuracy'])任务四训练模型训练神经网络模型需要执行以下步骤:第一步,将训练数据馈送给模型;第二步,模型学习将图像和标签关联起来第三步,要求模型对测试集进行预测;第四步,验证预测是否与test_labels数组中的标签相匹配。history=model.fit(train_images,train_labels,batch_size=20,epochs=10,validation_data=(test_images,test_labels),validation_freq=1)model.summary()比较模型在测试数据集上的表现,test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)print('\nTestaccuracy:',test_acc)model.save('model_foods.h5')任务五调用模型新建main.py,遍历test目录下的所有菜品,并对其进行预处理,方法同训练集数据。这里设置了图像与标签的映射关系,用于后续的结果输出。#导入包importosimportcv2importnumpyasnpdata=[]#存储菜品的原始图像,以备后续利用food_images=[]#存储菜品图像N=23#N为菜品的种类数#设置图像与标签的映射关系food_names_dict={0:"美食_八宝玫瑰镜糕",1:"美食_凉皮",2:"美食_凉鱼",3:"美食_德懋恭水晶饼",4:"美食_搅团",5:"美食_枸杞炖银耳",6:"美食_柿子饼",7:"美食_浆水面",8:"美食_灌汤包",9:"美食_烧肘子",10:"美食_石子饼",11:"美食_神仙粉",12:"美食_粉汤羊血",13:"美食_羊肉泡馍",14:"美食_肉夹馍",15:"美食_荞面饸饹",16:"美食_菠菜面",17:"美食_蜂蜜凉粽子",18:"美食_蜜饯张口酥饺",19:"美食_西安油茶",20:"美食_贵妃鸡翅",21:"美食_醪糟",22:"美食_金线油塔"}forroot,dirs,filesinos.walk("food/test/"):forfileinfiles:ifos.path.splitext(file)[1]=='.jpg':temp_image_ori=plt.imread(root+"/"+file)temp_image_ori=cv2.resize(temp_image_ori,(224,224))data.append(temp_image_ori)temp_image=cv2.imread(root+"/"+file)temp_image=cv2.resiz

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论