- 莫烦机器学习教程
- 有趣的机器学习
- 机器学习 (Machine Learning)
- 神经网络 (Neural Network)
- 卷积神经网络 CNN (Convolutional Neural Network)
- 循环神经网络 RNN (Recurrent Neural Network)
- LSTM RNN 循环神经网络 (LSTM)
- 自编码 (Autoencoder)
- 检验神经网络 (Evaluation)
- 特征标准化 (Feature Normalization)
- 选择好特征 (Good Features)
- 激励函数 (Activation Function)
- 过拟合 (Overfitting)
- 加速神经网络训练 (Speed Up Training)
- 处理不均衡数据 (Imbalanced data)
- 批标准化 (Batch Normalization)
- L1 / L2 正规化 (Regularization)
- 强化学习 (Reinforcement Learning)
- 强化学习方法汇总 (Reinforcement Learning)
- Q Leaning
- Sarsa
- Sarsa(lambda)
- DQN
- Policy Gradients
- Actor Critic
- Deep Deterministic Policy Gradient (DDPG)
- Asynchronous Advantage Actor-Critic (A3C)
- 强化学习教程
- Why?
- 课程要求
- 小例子
- Q-learning 算法更新
- Q-learning 思维决策
- Sarsa 算法更新
- Sarsa 思维决策
- Sarsa-lambda
- DQN 算法更新 (Tensorflow)
- DQN 神经网络 (Tensorflow)
- DQN 思维决策 (Tensorflow)
- OpenAI gym 环境库 (Tensorflow)
- Double DQN (Tensorflow)
- Prioritized Experience Replay (DQN) (Tensorflow)
- Dueling DQN (Tensorflow)
- Policy Gradients 算法更新 (Tensorflow)
- Policy Gradients 思维决策 (Tensorflow)
- Actor Critic (Tensorflow)
- Deep Deterministic Policy Gradient (DDPG) (Tensorflow)
- Asynchronous Advantage Actor-Critic (A3C) (Tensorflow)
- TensorFlow 教程
- 为什么选 Tensorflow
- 安装
- 神经网络在干嘛
- 处理结构
- 例子 2
- Session 会话控制
- Variable 变量
- Placeholder 传入值
- 激励函数 Activation Function
- 例子 3 添加层 def add_layer()
- 例子 3 建造神经网络
- 例子 3 结果可视化
- 优化器 optimizer
- Tensorboard 可视化好帮手 1
- Tensorboard 可视化好帮手 2
- Classification 分类学习
- Dropout 解决 overfitting
- CNN 卷积神经网络 1
- CNN 卷积神经网络 2
- CNN 卷积神经网络 3
- Saver 保存读取
- RNN 循环神经网络
- RNN LSTM 循环神经网络 (分类例子)
- RNN LSTM (回归例子)
- RNN LSTM (回归例子可视化)
- 自编码 Autoencoder (非监督学习)
- scope 命名方法
- Batch Normalization 批标准化
- PyTorch 教程
- Why?
- 安装
- Torch 或 Numpy
- 变量 (Variable)
- 激励函数 (Activation)
- 关系拟合 (回归)
- 区分类型 (分类)
- 快速搭建法
- 保存提取
- 批训练
- Optimizer 优化器
- CNN 卷积神经网络
- RNN 循环神经网络 (分类)
- RNN 循环神经网络 (回归)
- AutoEncoder (自编码/非监督学习)
- DQN 强化学习
- GAN (Generative Adversarial Nets 生成对抗网络)
- 为什么 Torch 是动态的
- GPU 加速运算
- Dropout 缓解过拟合
- Batch Normalization 批标准化
- Theano 教程
- Why?
- 安装
- 神经网络在做什么
- 基本用法
- Function 用法
- Shared 变量
- Activation function 激励函数
- 定义 Layer 类
- Regression 回归例子
- 可视化结果 回归例子
- Classification 分类学习
- Regularization 正规化
- Save 保存 提取
- 总结和更多
- Keras 教程
- Why?
- 安装
- 兼容 backend
- Regressor 回归
- Classifier 分类
- CNN 卷积神经网络
- RNN Classifier 循环神经网络
- RNN Regressor 循环神经网络
- Autoencoder 自编码
- Save & reload 保存提取
- Scikit learn 教程
- Why?
- 安装
- 选择学习方法
- 通用学习模式
- sklearn 强大数据库
- sklearn 常用属性与功能
- 正规化 Normalization
- 交叉验证 1 Cross-validation
- 交叉验证 2 Cross-validation
- 交叉验证 3 Cross-validation
- 保存模型
CNN 卷积神经网络 3
作者: 年拾柒 编辑: Morvan
这一次我们一层层的加上了不同的 layer. 分别是:
- convolutional layer1 + max pooling;
- convolutional layer2 + max pooling;
- fully connected layer1 + dropout;
- fully connected layer2 to prediction.
我们利用上节课定义好的函数来构建我们的网络
首先呢,我们定义一下输入的 placeholder
xs=tf.placeholder(tf.float32,[None,784])
ys=tf.placeholder(tf.float32,[None,10])
我们还定义了 dropout
的 placeholder
,它是解决过拟合的有效手段
keep_prob=tf.placeholder(tf.float32)
接着呢,我们需要处理我们的 xs
,把 xs
的形状变成 [-1,28,28,1]
,-1 代表先不考虑输入的图片例子多少这个维度,后面的 1 是 channel 的数量,因为我们输入的图片是黑白的,因此 channel 是 1,例如如果是 RGB 图像,那么 channel 就是 3。
x_image=tf.reshape(xs,[-1,28,28,1])
接着我们定义第一层卷积,先定义本层的 Weight
,本层我们的卷积核 patch 的大小是 5x5,因为黑白图片 channel 是 1 所以输入是 1,输出是 32 个 featuremap
W_conv1=weight_variable([5,5,1,32])
接着定义 bias
,它的大小是 32 个长度,因此我们传入它的 shape
为 [32]
b_conv1=bias_variable([32])
定义好了 Weight
和 bias
,我们就可以定义卷积神经网络的第一个卷积层 h_conv1=conv2d(x_image,W_conv1)+b_conv1
,同时我们对 h_conv1
进行非线性处理,也就是激活函数来处理喽,这里我们用的是 tf.nn.relu
(修正线性单元)来处理,要注意的是,因为采用了 SAME
的 padding 方式,输出图片的大小没有变化依然是 28x28,只是厚度变厚了,因此现在的输出大小就变成了 28x28x32
h_conv1=tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)
最后我们再进行 pooling
的处理就 ok 啦,经过 pooling
的处理,输出大小就变为了 14x14x32
h_pool=max_pool_2x2(h_conv1)
接着呢,同样的形式我们定义第二层卷积,本层我们的输入就是上一层的输出,本层我们的卷积核 patch 的大小是 5x5,有 32 个 featuremap 所以输入就是 32,输出呢我们定为 64
W_conv2=weight_variable([5,5,32,64])
b_conv2=bias_variable([64])
接着我们就可以定义卷积神经网络的第二个卷积层,这时的输出的大小就是 14x14x64
h_conv2=tf.nn.relu(conv2d(h_pool1,W_conv2)+b_conv2)
最后也是一个 pooling 处理,输出大小为 7x7x64
h_pool2=max_pool_2x2(h_conv2)
好的,接下来我们定义我们的 fully connected layer,
进入全连接层时,我们通过 tf.reshape()
将 h_pool2
的输出值从一个三维的变为一维的数据, -1 表示先不考虑输入图片例子维度,将上一个输出结果展平。
#[n_samples,7,7,64]->>[n_samples,7*7*64]
h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
此时 weight_variable
的 shape
输入就是第二个卷积层展平了的输出大小: 7x7x64, 后面的输出 size 我们继续扩大,定为 1024
W_fc1=weight_variable([7*7*64,1024])
b_fc1=bias_variable([1024])
然后将展平后的 h_pool2_flat
与本层的 W_fc1
相乘(注意这个时候不是卷积了)
h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_fc1)
如果我们考虑过拟合问题,可以加一个 dropout 的处理
h_fc1_drop=tf.nn.dropout(h_fc1,keep_drop)
接下来我们就可以进行最后一层的构建了,好激动啊,输入是 1024,最后的输出是 10 个 (因为 mnist 数据集就是[0-9]十个类),prediction 就是我们最后的预测值
W_fc2=weight_variable([1024,10]) b_fc2=bias_variable([10])
然后呢我们用 softmax 分类器(多分类,输出是各个类的概率),对我们的输出进行分类
prediction=tf.nn.softmax(tf.matmul(h_fc1_dropt,W_fc2),b_fc2)
接着呢我们利用交叉熵损失函数来定义我们的 cost function
cross_entropy=tf.reduce_mean(
-tf.reduce_sum(ys*tf.log(prediction),
reduction_indices=[1]))
我们用 tf.train.AdamOptimizer()
作为我们的优化器进行优化,使我们的 cross_entropy
最小
train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
接着呢就是和之前视频讲的一样喽 定义 Session
sess=tf.Session()
初始化变量
# tf.initialize_all_variables() 这种写法马上就要被废弃
# 替换成下面的写法:
sess.run(tf.global_variables_initializer())
好啦接着就是训练数据啦,我们假定训练 1000
步,每 50
步输出一下准确率, 注意 sess.run()
时记得要用 feed_dict
给我们的众多 placeholder
喂数据哦。
以上呢就是一个简单的卷积神经网络的例子代码
如果你觉得这篇文章或视频对你的学习很有帮助,请你也分享它,让它能再次帮助到更多的需要学习的人。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论