H
1
×
D
1
1.2、池化层
在连续的卷积层之间用来压缩数据和参数的量,使得计算资源耗费变少,也能有效控制过拟合。
通常使用Max pooling 最大池化,当然也存在 average pooling 平均池化等其他池化方式
1.3、激励层
把卷积层输出结果做非线性映射
1.4、 全连接层 / FC layer
这里没什么说的,在全连接层中,神经元对于前一层中的所有激活数据是全部连接的,这个常规神经网络中一样。它们的激活可以先用矩阵乘法,再加上偏置。
1.5、 层级排列规律
-
INPUT 输入层
-
[[CONV -> RELU]*N -> POOL?]*M 多次卷积接一个池化层
-
[FC -> RELU]*K 全连接层
-
FC 全连接层输出其中
*指的是重复次数,POOL?指的是一个可选的汇聚层。其中N >=0,通常N<=3,M>=0,K>=0,通常K<3
2、应用场景
卷积神经网络因为其对图像的特征提取的特点被广泛应用
-
被用于
OCR文字识别领域
,最简单的就是mnist手写体识别,本片末尾我将根据上篇神经网络为例,使用卷积神经网络重新建立模型进行手写体识别
-
图片分类:Alex Krizhevsky等人2012年的文章“ImageNet classification with deep convolutional neural networks”对ImageNet的一个子数据集进行了分类。ImageNet一共包含1500万张有标记的高分辨率图像,包含22,000个种类。这些图像是从网络上搜集的并且由人工进行标记。从2010年开始,有一个ImageNet的图像识别竞赛叫做ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)。 ILSVRC使用了ImageNet中的1000种图像,每一种大约包含1000个图像。总共有120万张训练图像,5万张验证图像(validation images)和15万张测试图像(testing images)。
-
文本分类:卷积神经网络不仅可以识别图像,因为其独特的网络结构使得他也可以被应用于文本分类
-
AlphaGo:DeepMind所研究的AlphaGo使用了卷积神经网络来学习人类下棋的方法,最终取得了突破。AlphaGo在没有任何让子的情况下以5:0完胜欧洲冠军,职业围棋二段樊麾。研究者也让AlphaGo和其他的围棋AI进行了较量,在总计495局中只输了一局,胜率是99.8%。它甚至尝试了让4子对阵Crazy Stone,Zen和Pachi三个先进的AI,胜率分别是77%,86%和99%。
3、代码实现
仍然使用mnist手写体作为例子(tensorflow官网同款,因为只是讲解原理所以找的例子没有很复杂),因为是图片识别,使用CNN后对图片识别的准确率会上升,优于传统的神经网络。
卷积神经网络发展至今已经产生了很多nb的研究成果(VGG、盗梦空间、ResNEt等),我会在接下来的博客中介绍,同时也会使用CNN做一个有趣的应用。
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("input_data/", one_hot=True)
learning_rate = 1e-4
epochs = 3000
batch_size = 50
input_size = 784
class_num = 10
dropout = 0.25
weights = {
'wc1': tf.Variable(tf.random_normal([3, 3, 1, 64])),
'wc2': tf.Variable(tf.random_normal([3, 3, 64, 128])),
'wd1': tf.Variable(tf.random_normal([7*7*128, 1024])),
'out': tf.Variable(tf.random_normal([1024, class_num]))
biases = {
'bc1': tf.Variable(tf.random_normal([64])),
'bc2': tf.Variable(tf.random_normal([128])),
'bd1': tf.Variable(tf.random_normal([1024])),
'out': tf.Variable(tf.random_normal([class_num]))
def conv2d(x, W, b, strides=1):
x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
x = tf.nn.bias_add(x,b)
return tf.nn.relu(x)
def max_pooling2d(x, k=2):
return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1], padding='SAME')
def conv_basic(input):
x = tf.reshape(input, shape=[-1, 28, 28, 1])
conv_1 = conv2d(x, weights['wc1'], biases['bc1'])
conv_1 = max_pooling2d(conv_1, k=2)
conv_2 = conv2d(conv_1, weights['wc2'], biases['bc2'])
conv_2 = max_pooling2d(conv_2, k=2)
dense = tf.reshape(conv_2, shape=[-1, weights['wd1'].get_shape().as_list()[0]])
fc_1 = tf.nn.relu(tf.add(tf.matmul(dense, weights['wd1']), biases['bd1']))
fc_1 = tf.nn.dropout(fc_1, dropout)
out = tf.add(tf.matmul(fc_1, weights['out']), biases['out'])
out = tf.nn.softmax(out)
return out
X = tf.placeholder(tf.float32, shape=[None, input_size])
Y = tf.placeholder(tf.float32, shape=[None, class_num])
keep_prob = tf.placeholder(tf.float32)
logits = conv_basic(X)
pred = tf.nn.softmax(logits)
loss = -tf.reduce_sum(Y*tf.log(pred))
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)
correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(Y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
saver = tf.train.Saver()
for epoch in range(1, epochs+1):
batch_x, batch_y = mnist.train.next_batch(batch_size)
sess.run(optimizer, feed_dict={X: batch_x, Y: batch_y, keep_prob: 0.5})
if epoch % 100 == 0 or epoch == 1:
train_accuracy = sess.run(accuracy, feed_dict={X: batch_x, Y: batch_y, keep_prob: 1.0})
print("step {} training accuracy {}".format(epoch, train_accuracy))
saver.save(sess, "./model/cnn_mnist.ckpt")
print("训练结束!")
1 CNN
原理
卷
积
神经网络
主要应用在图像识别领域中,是指非某类网络的集合,其中包含了多种不同类型的结构。 不同网络结构,其性能一般也会有所不同。 通过对CNN几种典型架构的研究,我们可以发现这些网络创造者们极富创意,其中许多架构十分精巧,他们获得了重新引入当今主流几种典型架构的机会。 下面就从卷
积
神经网络
原理
开始。
所有CNN的最终目的就是将一幅照片变成一个特征向量,而特征向量等于这幅照片的DNA。 与上面的VGG网络类似,经过若干层卷
积
、池化和全连接等步骤,使图片维度减少,并最终转化为一维向量。 该
深度学习系列课程从基本的
神经网络
开始讲起,逐步过渡到当下流行的卷
积
与递归
神经网络
架构。课程风格通俗易懂,方便大家掌握深度学习的
原理
。课程以实战为导向,结合当下热门的Tensorflow框架进行案例实战,让同学们上手建模实战。对深度学习经典项目,从数据处理开始一步步带领大家完成多个项目实战任务!
这里的
神经网络
,也指人工
神经网络
(Artificial Neural Networks,简称ANNs),是一种模仿生物
神经网络
行为特征的算法数学模型,由神经元、节点与节点之间的连接(突触)所构成,如下图:
每个
神经网络
单元抽象出来的数学模型如下,也叫感知器,它接收多个输入(x1,x2,x3…),产生一个输出,这就好比是神经末梢感受各种外部环境的变化(外部刺激),然后产生电信号,以便于转导到神经细胞(又叫神经元)。
单个的感知器就构成了一个简单的模型,但在现实世界中,实际的决策模型则要复杂得多,往往是由.
卷
积
神经网络
由一个或多个卷
积
层、池化层以及全连接层等组成。与其他深度学习结构相比,卷
积
神经网络
在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度
神经网络
,卷
积
神经网络
需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。
我们来看一下卷
积
网络的整体结构什么样子。
其中包含了几个主要结构
卷
积
层(Convolutions)
池化层(Subsampling)
全连接层(Full c
本文分析了全连接层存在的局限性,然后引出卷
积
的思想方法,介绍了如何进行卷
积
、池化计算,提取特征。学习了卷
积
神经网络
,就可以用
神经网络
高效地进行图像处理,比如说用于人脸识别、图片清晰化、风格迁移等。【目录】一、前言 二、全连接层的局限性 三、卷
积
层 3.1 如何进行卷
积
运算? 3.2 偏置 3.3 填充 3.4 步长 3.5 卷
积
运算是如何保留图片特征的? 3.6 三维卷
积
3.7 多种特征提取 四、池化层 五、全连接层 六、参考资料
卷
积
层(Convolutions)
(1) 概念:卷
积
运算的目的是提取输入的不同特征,某些卷
积
层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。
(2) 运算规则:可参考https://mlnotebook.github.io/post/CNN1/,如图:
深度学习——卷
积
神经网络
原理
解析
文章目录深度学习——卷
积
神经网络
原理
解析前言一、卷
积
?
神经网络
?二、卷
积
神经网络
?三、卷
积
神经网络
的组成层四、卷
积
层五、池化层六、全连接层七、卷
积
神经网络
的经验参数设置八、References
卷
积
神经网络
可有效的运用在计算机视觉的经典任务中,例如目标检测、人脸识别等,所以,在进行这些任务时,多半都要运用到这些知识,例如卷
积
层是如何操作的,池化的方式有哪些,...
一、卷
积
神经网络
的基本概念
受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷
积
神经网络
(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷
积
神经网络
在多个方向持续发力,在语音识别、人脸识别、通用物体识别、运动分析、自然语言处理甚至脑电波分析方面均有突破。
卷
积
神经网络
与普通
神经网络
的区别在于,卷
人工智能Artificial Intelligence中卷
积
神经网络
Convolutional Neural Network基本
原理
综述人工智能(Artificial Intelligence,简称AI)的Deep Learning(深度学习)通过机器学习,把某一层的输出output当做下一层的输入input。在人工智能中,认为output是机器通过深度学习获得的某种“智慧”。深度学习(Deep