利用Tensorflow实现卷积神经网络模型

首先看一下卷积神经网络模型,如下图:

卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC
池化层:为了减少运算量和数据维度而设置的一种层。

代码如下:

n_input  = 784        # 28*28的灰度图
n_output = 10         # 完成一个10分类的操作
weights  = {
    #‘权重参数‘: tf.Variable(tf.高期([feature的H, feature的W, 当前feature连接的输入的深度, 最终想得到多少个特征图], 标准差=0.1)),
    ‘wc1‘: tf.Variable(tf.random_normal([3, 3, 1, 64], stddev=0.1)),
    ‘wc2‘: tf.Variable(tf.random_normal([3, 3, 64, 128], stddev=0.1)),
   #‘全连接层参数‘: tf.Variable(tf.高斯([特征图H*特征图W*深度, 最终想得到多少个特征图], 标准差=0.1)),
    ‘wd1‘: tf.Variable(tf.random_normal([7*7*128, 1024], stddev=0.1)),
    ‘wd2‘: tf.Variable(tf.random_normal([1024, n_output], stddev=0.1))
}
biases   = {
   #‘偏置参数‘: tf.Variable(tf.高斯([第1层有多少个偏置项], 标准差=0.1)),
    ‘bc1‘: tf.Variable(tf.random_normal([64], stddev=0.1)),
    ‘bc2‘: tf.Variable(tf.random_normal([128], stddev=0.1)),
    ‘bd1‘: tf.Variable(tf.random_normal([1024], stddev=0.1)),
    ‘bd2‘: tf.Variable(tf.random_normal([n_output], stddev=0.1))
}

#卷积神经网络
def conv_basic(_input, _w, _b, _keepratio):
    #将输入数据转化成一个四维的[n, h, w, c]tensorflow格式数据
    #_input_r = tf.将输入数据转化成tensorflow格式(输入, shape=[batch_size大小, H, W, 深度])
    _input_r = tf.reshape(_input, shape=[-1, 28, 28, 1])

    #第1层卷积
    #_conv1 = tf.nn.卷积(输入, 权重参数, 步长=[batch_size大小, H, W, 深度], padding=‘建议选择SAME‘)
    _conv1 = tf.nn.conv2d(_input_r, _w[‘wc1‘], strides=[1, 1, 1, 1], padding=‘SAME‘)
    #_conv1 = tf.nn.非线性激活函数(tf.nn.加法(_conv1, _b[‘bc1‘]))
    _conv1 = tf.nn.relu(tf.nn.bias_add(_conv1, _b[‘bc1‘]))
    #第1层池化
    #_pool1 = tf.nn.池化函数(_conv1, 指定池化窗口的大小=[batch_size大小, H, W, 深度], strides=[1, 2, 2, 1], padding=‘SAME‘)
    _pool1 = tf.nn.max_pool(_conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding=‘SAME‘)
    #随机杀死一些节点,不让所有神经元都加入到训练中
    #_pool_dr1 = tf.nn.dropout(_pool1, 保留比例)
    _pool_dr1 = tf.nn.dropout(_pool1, _keepratio)

    #第2层卷积
    _conv2 = tf.nn.conv2d(_pool_dr1, _w[‘wc2‘], strides=[1, 1, 1, 1], padding=‘SAME‘)
    _conv2 = tf.nn.relu(tf.nn.bias_add(_conv2, _b[‘bc2‘]))
    _pool2 = tf.nn.max_pool(_conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding=‘SAME‘)
    _pool_dr2 = tf.nn.dropout(_pool2, _keepratio)

    #全连接层
    #转化成tensorflow格式
    _dense1 = tf.reshape(_pool_dr2, [-1, _w[‘wd1‘].get_shape().as_list()[0]])
    #第1层全连接层
    _fc1 = tf.nn.relu(tf.add(tf.matmul(_dense1, _w[‘wd1‘]), _b[‘bd1‘]))
    _fc_dr1 = tf.nn.dropout(_fc1, _keepratio)
    #第2层全连接层
    _out = tf.add(tf.matmul(_fc_dr1, _w[‘wd2‘]), _b[‘bd2‘])
    #返回值
    out = { ‘input_r‘: _input_r, ‘conv1‘: _conv1, ‘pool1‘: _pool1, ‘pool1_dr1‘: _pool_dr1,
        ‘conv2‘: _conv2, ‘pool2‘: _pool2, ‘pool_dr2‘: _pool_dr2, ‘dense1‘: _dense1,
        ‘fc1‘: _fc1, ‘fc_dr1‘: _fc_dr1, ‘out‘: _out
    }
    return out
print ("CNN READY")

#设置损失函数&优化器(代码说明:略 请看前面文档)
learning_rate = 0.001
x      = tf.placeholder("float", [None, nsteps, diminput])
y      = tf.placeholder("float", [None, dimoutput])
myrnn  = _RNN(x, weights, biases, nsteps, ‘basic‘)
pred   = myrnn[‘O‘]
cost   = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optm   = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) # Adam Optimizer
accr   = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(pred,1), tf.argmax(y,1)), tf.float32))
init   = tf.global_variables_initializer()
print ("Network Ready!")

#训练(代码说明:略 请看前面文档)
training_epochs = 5
batch_size      = 16
display_step    = 1
sess = tf.Session()
sess.run(init)
print ("Start optimization")
for epoch in range(training_epochs):
    avg_cost = 0.
    #total_batch = int(mnist.train.num_examples/batch_size)
    total_batch = 100
    # Loop over all batches
    for i in range(total_batch):
        batch_xs, batch_ys = mnist.train.next_batch(batch_size)
        batch_xs = batch_xs.reshape((batch_size, nsteps, diminput))
        # Fit training using batch data
        feeds = {x: batch_xs, y: batch_ys}
        sess.run(optm, feed_dict=feeds)
        # Compute average loss
        avg_cost += sess.run(cost, feed_dict=feeds)/total_batch
    # Display logs per epoch step
    if epoch % display_step == 0:
        print ("Epoch: %03d/%03d cost: %.9f" % (epoch, training_epochs, avg_cost))
        feeds = {x: batch_xs, y: batch_ys}
        train_acc = sess.run(accr, feed_dict=feeds)
        print (" Training accuracy: %.3f" % (train_acc))
        testimgs = testimgs.reshape((ntest, nsteps, diminput))
        feeds = {x: testimgs, y: testlabels, istate: np.zeros((ntest, 2*dimhidden))}
        test_acc = sess.run(accr, feed_dict=feeds)
        print (" Test accuracy: %.3f" % (test_acc))
print ("Optimization Finished.")        
时间: 2024-10-13 21:23:26

利用Tensorflow实现卷积神经网络模型的相关文章

基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型

一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要就是给大家做个铺垫,如有错误请指正,相互学习共同进步. 二.卷积神经网络讲解 2.1卷积神经网络作用 大家应该知道大名鼎鼎的傅里叶变换,即一个波形,可以有不同的正弦函数和余弦函数进行叠加完成,卷积神经网络也是一样,可以认为一张图片是由各种不同特征的图片叠加而成的,所以它的作用是用来提取特定的特征,举

VGG卷积神经网络模型解析

VGG卷积神经网络模型解析 一:VGG介绍与模型结构 VGG全称是Visual Geometry Group属于牛津大学科学工程系,其发布了一些列以VGG开头的卷积网络模型,可以应用在人脸识别.图像分类等方面,分别从VGG16-VGG19.VGG研究卷积网络深度的初衷是想搞清楚卷积网络深度是如何影响大规模图像分类与识别的精度和准确率的,最初是VGG-16号称非常深的卷积网络全称为(GG-Very-Deep-16 CNN),VGG在加深网络层数同时为了避免参数过多,在所有层都采用3x3的小卷积核,

【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构建CNN[待学习] 全连接+各种优化[待学习] BN层[待学习] 先解释以下MNIST数据集,训练数据集有55,000 条,即X为55,000 * 784的矩阵,那么Y为55,000 * 10的矩阵,每个图片是28像素*28像素,带有标签,Y为该图片的真实数字,即标签,每个图片10个数字,1所在位置

CNN-2: AlexNet 卷积神经网络模型

1.AlexNet 模型简介 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷积神经网络乃至深度学习重新引起了广泛的关注. 2.AlexNet 模型特点 AlexNet是在LeNet的基础上加深了网络的结构,学习更丰富更高维的图像特征.AlexNet的特点:1)更深的网络结构2)使用层叠的卷积层,即卷积层+卷积层+池化层来提取图像的特征3)使用D

轻量化卷积神经网络模型总结by wilson(shffleNet,moblieNet,squeezeNet+Xception)

一.简介 主要参考博客:纵览轻量化卷积神经网络 https://zhuanlan.zhihu.com/p/32746221 1, SqueezeNet: SqueezeNet对比AlexNet能够减少50倍的网络参数,但是却拥有相近的性能.SqueezeNet主要强调用1x1的卷积核进行feature map个数的压缩,从而达到大量减少网络参数的目的.在构造网络的时候,采用VGG的堆叠思想. 2, moblieNet: MobileNet采用depth-wise convolution的卷积方式

吴裕雄--天生自然python Google深度学习框架:经典卷积神经网络模型

import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABELS = 10 CONV1_DEEP = 32 CONV1_SIZE = 5 CONV2_DEEP = 64 CONV2_SIZE = 5 FC_SIZE = 512 def inference(input_tensor, train, regularizer): with tf.variable_s

动手学pytorch-经典卷积神经网络模型

经典卷积神经网络 1.LeNet 2.AlexNet 3.VGG 4.NiN 5.GoogleNet 1.LeNet 卷积层块里的基本单位是卷积层后接平均池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的平均池化层则用来降低卷积层对位置的敏感性.卷积层块由两个这样的基本单位重复堆叠构成.在卷积层块中,每个卷积层都使用5×5的窗口,并在输出上使用sigmoid激活函数.第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16.全连接层块含3个全连接层.它们的输出个数分别是120

深度学习与自然语言处理之四:卷积神经网络模型(CNN)

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 大纲如下: 1.CNN基础模型 2.单CNN模型的改进    2.1对输入层的改进    2.2Convolution层的改进    2.3Sub-Sampling层的改进    2.4全连接层的改进 3.多CNN模型的改进 4.探讨与思考 扫一扫关注微信号:"布洛卡区" ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号.

神经网络模型种类

神经网络模型种类 一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征.一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来:其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等.特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性.此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数.卷积神经网络中的每一个卷积层