人工智能实践:Tensorflow笔记 北京大学 7 第七讲卷积网络基础 (7.3.1) 助教的Tenso
人工智能实践实习报告

实习报告:人工智能实践实习经历一、实习背景随着科技的飞速发展,人工智能(AI)已经成为当今社会的一大热点。
作为计算机科学专业的学生,我一直对人工智能领域充满好奇,并希望通过实践锻炼自己的能力。
在这个暑假,我幸运地获得了一次在一家知名人工智能公司实习的机会。
在这份实习报告中,我将分享我在实习期间的学习和工作经验,以及人工智能领域的实践应用。
二、实习内容实习期间,我参与了公司的一个项目,旨在开发一款基于人工智能的音乐推荐系统。
该系统利用深度学习技术对用户听歌行为进行分析,从而为用户提供个性化的音乐推荐。
在项目过程中,我主要负责以下工作:1. 数据处理:在项目开始阶段,我们需要对大量音乐数据进行预处理,包括数据清洗、特征提取等。
我学习了如何使用Python的Pandas库进行数据处理,并掌握了相关数据处理技巧。
2. 模型训练:接下来,我参与了基于TensorFlow的深度学习模型的开发。
我学习了卷积神经网络(CNN)和循环神经网络(RNN)的基本原理,并掌握了模型训练、评估和优化方法。
3. 模型部署:为了将模型应用于实际场景,我们需要将其部署到服务器上。
我学习了使用Flask框架搭建Web应用,并将模型集成到应用中。
通过这一过程,我了解了服务器配置、模型部署等实际操作。
4. 系统测试与优化:在系统开发完成后,我们需要对系统进行测试,以保证其稳定性和可靠性。
我参与了系统测试工作,并针对发现的问题进行了一系列优化。
三、实习收获通过这次实习,我不仅在理论上加深了对人工智能领域的理解,还提高了自己的实际操作能力。
以下是我在实习过程中的一些收获:1. 掌握了Python编程和相关库的使用,如Pandas、TensorFlow、Flask等。
2. 学会了深度学习的基本原理和模型训练方法,如CNN、RNN等。
3. 了解了服务器配置、模型部署等实际操作,提高了自己的实际动手能力。
4. 学会了与他人协作,提高了团队协作能力。
人工智能课程大纲

视频31:SMO算法
视频32:应用案例
视频33:朴素贝叶斯
视频34:贝叶斯决策论&贝叶斯分类器
视频35:应用案例.
视频36:bagging和随机森林
视频37:前向分布算法
视频38:梯度提升树
视频39:XGBoost.
视频40:Adaboost
视频41:应用案例
视频42:神经元模型
课程时长
64
课程内容
第一讲:绪论
第二讲:语音信号处理基础知识
第三讲:语音信号处理常用算法
第四讲:语音信号分析
第五讲:语音信号特征提取技术
第六讲:语音增强
第七讲:语音识别
第八讲:说话人识别
第九讲:语音编码
第十讲:语音合成与转换
第十一讲:语音信号情感分析
第十二讲:声源定位
实验内容
实验1:语音分帧实践
实验2:语音时域、频域分析实践
本课程讲解了神经网络方面技术,包括多层感知机,卷积神经网络,循环神经网络,及其经典架构和常见应用。并介绍常用的深度学习框架TensorFlow,实现多种经典模型。
课程目标
学生完成课程后的总体目标是:
(1)掌握深度学习的框架,以及常用的经典模型
(2)了解分布式计算框架和并行计算框架处理大规模计算的方式
实验9:利用Deep Q-Network控制倒立摆
7.
课程名称
OpenCV图像处理实战
课程介绍
本课程基于OpenCV最新版本3.4.0详细讲述OpenCV图像处理部分内容。主要包括图像的读取、几何变换、通道的分离与合并、ROI的标记、平滑与锐化操作、视频操作与目标检测,各种基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。涵盖OpenCV中图像处理部分的全部主要内容。课程中穿插了应用开发中常见问题与分析,是学习图像知识与应用开发最佳实践课程。
TensorFlow卷积神经网络MNIST数据集实现示例

TensorFlow卷积神经⽹络MNIST数据集实现⽰例这⾥使⽤TensorFlow实现⼀个简单的卷积神经⽹络,使⽤的是MNIST数据集。
⽹络结构为:数据输⼊层–卷积层1–池化层1–卷积层2–池化层2–全连接层1–全连接层2(输出层),这是⼀个简单但⾮常有代表性的卷积神经⽹络。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55import tensorflow as tfimport numpy as npimport input_datamnist =input_data.read_data_sets('data/', one_hot=True)print("MNIST ready")sess =tf.InteractiveSession()# 定义好初始化函数以便重复使⽤。
给权重制造⼀些随机噪声来打破完全对称,使⽤截断的正态分布,标准差设为0.1,# 同时因为使⽤relu,也给偏执增加⼀些⼩的正值(0.1)⽤来避免死亡节点(dead neurons)def weight_variable(shape):initial =tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial =tf.constant(0.1, shape=shape)return tf.Variable(initial)def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') # 参数分别指定了卷积核的尺⼨、多少个channel、filter的个数即产⽣特征图的个数# 2x2最⼤池化,即将⼀个2x2的像素块降为1x1的像素。
《人工智能概论》课程笔记

《人工智能概论》课程笔记第一章人工智能概述1.1 人工智能的概念人工智能(Artificial Intelligence,简称AI)是指使计算机具有智能行为的技术。
智能行为包括视觉、听觉、语言、学习、推理等多种能力。
人工智能的研究目标是让计算机能够模拟人类智能的某些方面,从而实现自主感知、自主决策和自主行动。
人工智能的研究领域非常广泛,包括机器学习、计算机视觉、自然语言处理、知识表示与推理等。
1.2 人工智能的产生与发展人工智能的概念最早可以追溯到上世纪50 年代。
1950 年,Alan Turing 发表了著名的论文《计算机器与智能》,提出了“图灵测试”来衡量计算机是否具有智能。
1956 年,在达特茅斯会议上,John McCarthy 等人首次提出了“人工智能”这个术语,并确立了人工智能作为一个独立的研究领域。
人工智能的发展可以分为几个阶段:(1)推理期(1956-1969):主要研究基于逻辑的符号操作和自动推理。
代表性成果包括逻辑推理、专家系统等。
(2)知识期(1970-1980):研究重点转向知识表示和知识工程,出现了专家系统。
代表性成果包括产生式系统、框架等。
(3)机器学习期(1980-1990):机器学习成为人工智能的重要分支,研究如何让计算机从数据中学习。
代表性成果包括决策树、神经网络等。
(4)深度学习期(2006-至今):深度学习技术的出现,推动了计算机视觉、自然语言处理等领域的发展。
代表性成果包括卷积神经网络、循环神经网络等。
1.3 人工智能的三大学派人工智能的研究可以分为三大学派:(1)符号主义学派:认为智能行为的基础是符号操作和逻辑推理。
符号主义学派的研究方法包括逻辑推理、知识表示、专家系统等。
(2)连接主义学派:认为智能行为的基础是神经网络和机器学习。
连接主义学派的研究方法包括人工神经网络、深度学习、强化学习等。
(3)行为主义学派:认为智能行为的基础是感知和行动。
行为主义学派的研究方法包括遗传算法、蚁群算法、粒子群算法等。
人工智能实践第七讲

7.2
Lenet 神经网络是 Yann LeCun 等人在 1998 年提出的,该神经网络充分考虑图像 的相关性。 √ Lenet 神经网络结构为: ①输入为 32*32*1 的图片大小,为单通道的输入; ②进行卷积,卷积核大小为 5*5*1,个数为 6,步长为 1,非全零填充模式; ③将卷积结果通过非线性激活函数; ④进行池化,池化大小为 2*2,步长为 1,全零填充模式; ⑤进行卷积,卷积核大小为 5*5*6,个数为 16,步长为 1,非全零填充模式; ⑥将卷积结果通过非线性激活函数; ⑦进行池化,池化大小为 2*2,步长为 1,全零填充模式; ⑧全连接层进行 10 分类。 Lenet 神经网络的结构图及特征提取过程如下所示:
对于彩色图,按层分解开,可以直观表示为上面这张图,三个颜色分量:红
色分量、绿色分量和蓝色分量。 卷积计算方ห้องสมุดไป่ตู้和单层卷积核相似,卷积核为了匹配红绿蓝三个颜色,把三层
的卷积核套在三层的彩色图片上,重合的 27 个像素进行对应点的乘加运算,最 后的结果再加上偏置项 b,求得输出图片中的一个值。
这个 5x5x3 的输入图片加了全零填充,使用 3x3x3 的卷积核,所有 27 个点与 对应的待优化参数相乘,乘积求和再加上偏置 b 得到输出图片中的一个值 6。
层零。
√ 使用 padding 和不使用 padding 的输出维度 上一行公式是使用 padding 的输出图片边长,下一行公式是不使用 padding
的输出图片边长。公式如果不能整除,需要向上取整数。如果用全零填充,也就 是 padding=SAME。如果不用全零填充,也就是 padding=VALID。 √Tensorflow 给出的计算卷积的函数
卷积神经网络(CNN)学习笔记

CNN卷积神经网络卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。
它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。
该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。
卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
CNNs是受早期的延时神经网络(TDNN)的影响。
延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。
CNNs是第一个真正成功训练多层网络结构的学习算法。
它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。
CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。
在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。
这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。
2)卷积神经网络的网络结构图:卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。
这些映射图再进过滤波得到C3层。
这个层级结构再和S2一样产生S4。
最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。
TensorFlow机器学习基础教程

TensorFlow机器学习基础教程TensorFlow是一种开源的机器学习框架,它广泛应用于各种领域,如计算机视觉、自然语言处理和深度学习等。
本文将对TensorFlow的基础知识进行介绍,并按类划分为以下几个章节。
第一章:TensorFlow简介TensorFlow是由Google开发的一个用于机器学习和深度学习的库。
它提供了一个灵活而高效的工具,可以用于构建、训练和部署各种机器学习模型。
TensorFlow的核心是张量(Tensor)和计算图(Graph),通过构建计算图来定义模型的计算过程,并通过张量来传递数据。
第二章:张量和计算图张量是TensorFlow中的核心概念之一。
它类似于多维数组,用于存储和传递数据。
TensorFlow中的计算过程是基于计算图的,计算图是一种数据流图,图中的节点表示计算操作,边表示数据流动的方向。
通过构建计算图,TensorFlow可以有效地执行各种计算操作,并自动进行梯度计算和优化。
第三章:TensorFlow的基本操作TensorFlow提供了一系列的操作和函数,用于构建和执行机器学习模型。
常见的操作包括张量的创建、变形、切片和合并等。
此外,TensorFlow还提供了各种计算函数,如矩阵乘法、激活函数、损失函数和优化器等。
通过这些操作和函数,可以方便地进行各种机器学习任务。
第四章:TensorFlow的模型构建TensorFlow通过组合各种操作和函数,可以构建各种机器学习模型。
常见的模型包括线性回归、逻辑回归、多层感知机和卷积神经网络等。
对于每个模型,可以定义模型的结构和参数,并通过计算图来实现模型的前向传播和反向传播。
通过反向传播,可以自动计算模型的梯度,并使用优化器来更新模型的参数。
第五章:TensorFlow的模型训练在构建好模型后,可以使用TensorFlow进行模型训练。
模型训练是通过迭代的方式来优化模型的参数,使模型的预测结果接近于真实标签。
Tensorflow学习教程------利用卷积神经网络对mnist数据集进行分类_训练模型

Tensorflow学习教程------利⽤卷积神经⽹络对mnist数据集进⾏分类_训练模型原理就不多讲了,直接上代码,有详细注释。
#coding:utf-8import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('MNIST_data',one_hot=True)#每个批次的⼤⼩batch_size = 100n_batch = mnist.train._num_examples // batch_sizedef weight_variable(shape):initial = tf.truncated_normal(shape,stddev=0.1) #⽣成⼀个截断的正态分布return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1,shape = shape)return tf.Variable(initial)#卷基层def conv2d(x,W):return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')#池化层def max_pool_2x2(x):return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')#定义两个placeholderx = tf.placeholder(tf.float32, [None,784])y = tf.placeholder(tf.float32,[None,10])#改变x的格式转为4D的向量[batch,in_height,in_width,in_channels]x_image = tf.reshape(x, [-1,28,28,1])#初始化第⼀个卷基层的权值和偏置W_conv1 = weight_variable([5,5,1,32]) #5*5的采样窗⼝ 32个卷积核从⼀个平⾯抽取特征 32个卷积核是⾃定义的b_conv1 = bias_variable([32]) #每个卷积核⼀个偏置值#把x_image和权值向量进⾏卷积,再加上偏置值,然后应⽤于relu激活函数h_conv1 = tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)h_pool1 = max_pool_2x2(h_conv1) #进⾏max-pooling#初始化第⼆个卷基层的权值和偏置W_conv2 = weight_variable([5,5,32,64]) # 5*5的采样窗⼝ 64个卷积核从32个平⾯抽取特征由于前⼀层操作得到了32个特征图b_conv2 = bias_variable([64]) #每⼀个卷积核⼀个偏置值#把h_pool1和权值向量进⾏卷积再加上偏置值然后应⽤于relu激活函数h_conv2 = tf.nn.relu(conv2d(h_pool1,W_conv2) + b_conv2)h_pool2 = max_pool_2x2(h_conv2) #进⾏max-pooling#28x28的图⽚第⼀次卷积后还是28x28 第⼀次池化后变为14x14#第⼆次卷积后变为14x14 第⼆次池化后变为7x7#通过上⾯操作后得到64张7x7的平⾯#初始化第⼀个全连接层的权值W_fc1 = weight_variable([7*7*64,1024])#上⼀层有7*7*64个神经元,全连接层有1024个神经元b_fc1 = bias_variable([1024]) #1024个节点#把第⼆个池化层的输出扁平化为⼀维h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64])#求第⼀个全连接层的输出h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_fc1)#keep_prob⽤来表⽰神经元的输出概率keep_prob = tf.placeholder(tf.float32)h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)#初始化第⼆个全连接层W_fc2 = weight_variable([1024,10])b_fc2 = bias_variable([10])#计算输出prediction = tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_fc2)#交叉熵代价函数cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))#使⽤AdamOptimizer进⾏优化train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)#结果存放在⼀个布尔列表中correct_prediction = tf.equal(tf.argmax(prediction,1),tf.argmax(y,1)) #argmax返回⼀维张量中最⼤的值所在的位置#求准确率accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))saver = tf.train.Saver()with tf.Session() as sess:sess.run(tf.global_variables_initializer())for epoch in range(50):for batch in range(n_batch):batch_xs,batch_ys = mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:0.7})acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:bels,keep_prob:1.0}) print ("Iter "+ str(epoch) + ", Testing Accuracy= " + str(acc)) saver.save(sess,save_path='/home/xxx/logs/mnistmodel',global_step=1)#将训练出来的权重参数保存结果Iter 0, Testing Accuracy= 0.8517Iter 1, Testing Accuracy= 0.9612Iter 2, Testing Accuracy= 0.9769Iter 3, Testing Accuracy= 0.9804Iter 4, Testing Accuracy= 0.9832Iter 5, Testing Accuracy= 0.9844Iter 6, Testing Accuracy= 0.988Iter 7, Testing Accuracy= 0.9882Iter 8, Testing Accuracy= 0.9875Iter 9, Testing Accuracy= 0.9889Iter 10, Testing Accuracy= 0.9891Iter 11, Testing Accuracy= 0.9897Iter 12, Testing Accuracy= 0.9891Iter 13, Testing Accuracy= 0.9897Iter 14, Testing Accuracy= 0.9905Iter 15, Testing Accuracy= 0.9913Iter 16, Testing Accuracy= 0.9908Iter 17, Testing Accuracy= 0.9909Iter 18, Testing Accuracy= 0.9913Iter 19, Testing Accuracy= 0.9915Iter 20, Testing Accuracy= 0.9902Iter 21, Testing Accuracy= 0.9899Iter 22, Testing Accuracy= 0.9912Iter 23, Testing Accuracy= 0.9911Iter 24, Testing Accuracy= 0.9907Iter 25, Testing Accuracy= 0.9918Iter 26, Testing Accuracy= 0.9919Iter 27, Testing Accuracy= 0.9916Iter 28, Testing Accuracy= 0.9899Iter 29, Testing Accuracy= 0.9924Iter 30, Testing Accuracy= 0.9913Iter 31, Testing Accuracy= 0.992Iter 32, Testing Accuracy= 0.9927Iter 33, Testing Accuracy= 0.9919Iter 34, Testing Accuracy= 0.9922Iter 35, Testing Accuracy= 0.9918Iter 36, Testing Accuracy= 0.9932Iter 37, Testing Accuracy= 0.9924Iter 38, Testing Accuracy= 0.9917Iter 39, Testing Accuracy= 0.9919Iter 40, Testing Accuracy= 0.9933Iter 41, Testing Accuracy= 0.9924Iter 42, Testing Accuracy= 0.9926Iter 43, Testing Accuracy= 0.9932Iter 44, Testing Accuracy= 0.9922Iter 45, Testing Accuracy= 0.9925Iter 46, Testing Accuracy= 0.9928Iter 47, Testing Accuracy= 0.9935Iter 48, Testing Accuracy= 0.9922Iter 49, Testing Accuracy= 0.9926。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Tensorflow笔记:第七讲卷积神经网络本节目标:学会使用CNN实现对手写数字的识别。
7.1√全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。
参数个数:∑(前层×后层+后层)一张分辨率仅仅是28x28的黑白图像,就有近40万个待优化的参数。
现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。
待优化的参数过多,容易导致模型过拟合。
为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。
√在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
例:先将此图进行多次特征提取,再把提取后的计算机可读特征喂给全连接网络。
√卷积Convolutional卷积是一种有效提取图片特征的方法。
一般用一个正方形卷积核,遍历图片上的每一个像素点。
图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。
例:上面是5x5x1的灰度图片,1表示单通道,5x5表示分辨率,共有5行5列个灰度值。
若用一个3x3x1的卷积核对此5x5x1的灰度图片进行卷积,偏置项b=1,则求卷积的计算是:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1(注意不要忘记加偏置1)。
输出图片边长=(输入图片边长–卷积核长+1)/步长,此图为:(5 – 3 + 1)/ 1 = 3,输出图片是3x3的分辨率,用了1个卷积核,输出深度是1,最后输出的是3x3x1的图片。
√全零填充Padding有时会在输入图片周围进行全零填充,这样可以保证输出图片的尺寸和输入图片一致。
例:在前面5x5x1的图片周围进行全零填充,可使输出图片仍保持5x5x1的维度。
这个全零填充的过程叫做padding。
输出数据体的尺寸=(W−F+2P)/S+1W:输入数据体尺寸,F:卷积层中神经元感知域,S:步长,P:零填充的数量。
例:输入是7×7,滤波器是3×3,步长为1,填充为0,那么就能得到一个5×5的输出。
如果步长为2,输出就是3×3。
如果输入量是32x32x3,核是5x5x3,不用全零填充,输出是(32-5+1)/1=28,如果要让输出量保持在32x32x3,可以对该层加一个大小为2的零填充。
可以根据需求计算出需要填充几层零。
32=(32-5+2P)/1 +1,计算出P=2,即需填充2层零。
√使用padding和不使用padding的输出维度上一行公式是使用padding的输出图片边长,下一行公式是不使用padding 的输出图片边长。
公式如果不能整除,需要向上取整数。
如果用全零填充,也就是padding=SAME。
如果不用全零填充,也就是padding=VALID。
√Tensorflow给出的计算卷积的函数函数中要给出四个信息:对输入图片的描述、对卷积核的描述、对卷积核滑动步长的描述以及是否使用padding。
1)对输入图片的描述:用batch给出一次喂入多少张图片,每张图片的分辨率大小,比如5行5列,以及这些图片包含几个通道的信息,如果是灰度图则为单通道,参数写1,如果是彩色图则为红绿蓝三通道,参数写3。
2)对卷积核的描述:要给出卷积核的行分辨率和列分辨率、通道数以及用了几个卷积核。
比如上图描述,表示卷积核行列分辨率分别为3行和3列,且是1通道的,一共有16个这样的卷积核,卷积核的通道数是由输入图片的通道数决定的,卷积核的通道数等于输入图片的通道数,所以卷积核的通道数也是1。
一共有16个这样的卷积核,说明卷积操作后输出图片的深度是16,也就是输出为16通道。
3)对卷积核滑动步长的描述:上图第二个参数表示横向滑动步长,第三个参数表示纵向滑动步长。
第一个1和最后一个1这里固定的。
这句表示横向纵向都以1为步长。
4)是否使用padding:用的是VALID。
注意这里是以字符串的形式给出VALID。
√对多通道的图片求卷积多数情况下,输入的图片是RGB三个颜色组成的彩色图,输入的图片包含了红、绿、蓝三层数据,卷积核的深度应该等于输入图片的通道数,所以使用3x3x3的卷积核,最后一个3表示匹配输入图像的3个通道,这样这个卷积核有三层,每层会随机生成9个待优化的参数,一共有27个待优化参数w和一个偏置b。
对于彩色图,按层分解开,可以直观表示为上面这张图,三个颜色分量:红色分量、绿色分量和蓝色分量。
卷积计算方法和单层卷积核相似,卷积核为了匹配红绿蓝三个颜色,把三层的卷积核套在三层的彩色图片上,重合的27个像素进行对应点的乘加运算,最后的结果再加上偏置项b,求得输出图片中的一个值。
这个5x5x3的输入图片加了全零填充,使用3x3x3的卷积核,所有27个点与对应的待优化参数相乘,乘积求和再加上偏置b得到输出图片中的一个值6。
针对上面这幅彩色图片,用conv2d函数实现可以表示为:一次输入batch张图片,输入图片的分辨率是5x5,是3通道的,卷积核是3x3x3,一共有16个卷积核,这样输出的深度就是16,核滑动横向步长是1,纵向步长也是1,padding选择same,保证输出是5x5分辨率。
由于一共用了16个卷积核,所以输出图片是5x5x16。
√池化PoolingTensorflow给出了计算池化的函数。
最大池化用tf.nn.max_pool函数,平均池化用tf.nn.avg_pool函数。
函数中要给出四个信息,对输入的描述、对池化核的描述、对池化核滑动步长的描述和是否使用padding。
1)对输入的描述:给出一次输入batch张图片、行列分辨率、输入通道的个数。
2)对池化核的描述:只描述行分辨率和列分辨率,第一个和最后一个参数固定是1。
3)对池化核滑动步长的描述:只描述横向滑动步长和纵向滑动步长,第一个和最后一个参数固定是1。
4)是否使用padding:padding可以是使用零填充SAME或者不使用零填充VALID。
√舍弃Dropout在神经网络训练过程中,为了减少过多参数常使用dropout的方法,将一部分神经元按照一定概率从神经网络中舍弃。
这种舍弃是临时性的,仅在训练时舍弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。
比如上面这张图,在训练时一些神经元不参加神经网络计算了。
Dropout可以有效减少过拟合。
Tensorflow提供的dropout的函数:用tf.nn.dropout函数。
第一个参数链接上一层的输出,第二个参数给出神经元舍弃的概率。
在实际应用中,常常在前向传播构建神经网络时使用dropout来减小过拟合加快模型的训练速度。
dropout一般会放到全连接网络中。
如果在训练参数的过程中,输出=tf.nn.dropout(上层输出,暂时舍弃神经元的概率),这样就有指定概率的神经元被随机置零,置零的神经元不参加当前轮的参数优化。
√卷积NN:借助卷积核(kernel)提取特征后,送入全连接网络。
卷积神经网络可以认为由两部分组成,一部分是对输入图片进行特征提取,另一部分就是全连接网络,只不过喂入全连接网络的不再是原始图片,而是经过若干次卷积、激活和池化后的特征信息。
卷积神经网络从诞生到现在,已经出现了许多经典网络结构,比如Lenet-5、Alenet、VGGNet、GoogleNet和ResNet等。
每一种网络结构都是以卷积、激活、池化、全连接这四种操作为基础进行扩展。
Lenet-5是最早出现的卷积神经网络,由Lecun团队首先提出,Lenet-5有效解决了手写数字的识别问题。
7.2Lenet神经网络是Yann LeCun等人在1998年提出的,该神经网络充分考虑图像的相关性。
√Lenet神经网络结构为:①输入为32*32*1的图片大小,为单通道的输入;②进行卷积,卷积核大小为5*5*1,个数为6,步长为1,非全零填充模式;③将卷积结果通过非线性激活函数;④进行池化,池化大小为2*2,步长为1,全零填充模式;⑤进行卷积,卷积核大小为5*5*6,个数为16,步长为1,非全零填充模式;⑥将卷积结果通过非线性激活函数;⑦进行池化,池化大小为2*2,步长为1,全零填充模式;⑧全连接层进行10分类。
Lenet神经网络的结构图及特征提取过程如下所示:Lenet神经网络结构图Lenet神经网络的输入是32*32*1,经过5*5*1的卷积核,卷积核个数为6个,采用非全零填充方式,步长为1,根据非全零填充计算公式:输出尺寸=(输入尺寸-卷积核尺寸+1)/步长=(32-5+1)/1=28.故经过卷积后输出为28*28*6。
经过第一层池化层,池化大小为2*2,全零填充,步长为2,由全零填充计算公式:输出尺寸=输入尺寸/步长=28/2=14,池化层不改变深度,深度仍为6。
用同样计算方法,得到第二层池化后的输出为5*5*16。
将第二池化层后的输出拉直送入全连接层。
√根据Lenet神经网络的结构可得,Lenet神经网络具有如下特点:①卷积(Conv)、池化(ave-pooling)、非线性激活函数(sigmoid)相互交替;②层与层之间稀疏连接,减少计算复杂度。
√对Lenet神经网络进行微调,使其适应Mnist数据集:由于Mnist数据集中图片大小为28*28*1的灰度图片,而Lenet神经网络的输入为32*32*1,故需要对Lenet神经网络进行微调。
①输入为28*28*1的图片大小,为单通道的输入;②进行卷积,卷积核大小为5*5*1,个数为32,步长为1,全零填充模式;③将卷积结果通过非线性激活函数;④进行池化,池化大小为2*2,步长为2,全零填充模式;⑤进行卷积,卷积核大小为5*5*32,个数为64,步长为1,全零填充模式;⑥将卷积结果通过非线性激活函数;⑦进行池化,池化大小为2*2,步长为2,全零填充模式;⑧全连接层,进行10分类。
Lenet进行微调后的结构如下所示:√Lenet神经网络在Mnist数据集上的实现,主要分为三个部分:前向传播过程(mnist_lenet5_forward.py)、反向传播过程(mnist_lenet5_backword.py)、测试过程(mnist_lenet5_test.py)。
第一,前向传播过程(mnist_lenet5_forward.py)实现对网络中参数和偏置的初始化、定义卷积结构和池化结构、定义前向传播过程。
具体代码如下所示:注释:1)定义前向传播过程中常用到的参数。
图片大小即每张图片分辨率为28*28,故IMAGE_SIZE取值为28;Mnist数据集为灰度图,故输入图片通道数NUM_CHANNELS取值为1;第一层卷积核大小为5,卷积核个数为32,故CONV1_SIZE取值为5,CONV1_KERNEL_NUM取值为32;第二层卷积核大小为5,卷积核个数为64,故CONV2_SIZE取值为5,CONV2_KERNEL_NUM为64;全连接层第一层为512个神经元,全连接层第二层为10个神经元,故FC_SIZE取值为512,OUTPUT_NODE取值为10,实现10分类输出。