卷积神经网络之tensorflow实现

tensorflow中集成了很多库和函数,卷积神经网络的实现变得十分简单,这节讲述如何利用tensorflow实现一个两个卷积层的神经网络,用于对手写数字的识别。

代码如下:

# -*- coding:utf-8 -*-
#功能:使用卷积神经网络实现对手写数字的识别

import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data



#新建权重函数和偏置函数
def weight_variable(shape):
    initial=tf.random_normal(shape,mean=0.0,stddev=0.01)
    return tf.Variable(initial)
def bias_variable(shape):
    initial=tf.random_normal(shape,mean=0.0,stddev=0.01)
    return tf.Variable(initial)

#新建输入输出有关的占位符
mnist=input_data.read_data_sets('MNIST_data/',one_hot=True)
x=tf.placeholder(tf.float32,[None,784])
y=tf.placeholder(tf.float32,[None,10])

#构造两层卷积神经网络
#把数据维度变为4-D,即(batch_size,width,height,channel)
#bacth_size=-1的意思是这个维度只用总维度除以width*height*channel
x_tensor=tf.reshape(x,[-1,28,28,1])

#设置第一个卷积层感知区域的大小
filter_size=3
n_filter_1=16
w_conv1=weight_variable([filter_size,filter_size,1,n_filter_1])
b_conv1=bias_variable([n_filter_1])

#第一次卷积后的结果 参数'SAME'满足了卷积前和卷积后的数据维度一致
#elu为激活函数
h_conv1=tf.nn.elu(tf.nn.conv2d(input=x_tensor,filter=w_conv1,strides=[1,2,2,1],padding='SAME')+b_conv1)

#第二个卷积核的
n_filter_2=16  #个数
w_conv2=weight_variable([filter_size,filter_size,n_filter_1,n_filter_2])
b_conv2=bias_variable([n_filter_2])

#第二个卷积之后的结果 
h_conv2=tf.nn.elu(tf.nn.conv2d(input=h_conv1,filter=w_conv2,strides=[1,2,2,1],padding='SAME')+b_conv2)

#添加全连接隐层
#由卷积层过度到隐含层,需要对卷积层的输出做一个维度变换
h_conv2_flat=tf.reshape(h_conv2,[-1,7*7*n_filter_2])

#创造一个全连接层,隐含神经元的个数为1024
n_fc=1024
w_fc1=weight_variable([7*7*n_filter_2,n_fc])
b_fc1=bias_variable([n_fc])
#全连接之后的输出层
h_fc1=tf.nn.elu(tf.matmul(h_conv2_flat,w_fc1)+b_fc1)

#添加dropout 防止过拟合
keep_prob=tf.placeholder(tf.float32)
h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)

#添加softmax层
w_fc2=weight_variable([n_fc,10])
b_fc2=bias_variable([10])
y_pred=tf.nn.softmax(tf.matmul(h_fc1_drop,w_fc2)+b_fc2)

#获取目标函数
cross_entropy=-tf.reduce_sum(y*tf.log(y_pred))
optimizer=tf.train.AdamOptimizer().minimize(cross_entropy)

#计算分类准确率
correct_prediction=tf.equal(tf.argmax(y_pred,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,'float'))

#新建会话 并进行mini_batch训练
sess=tf.Session()
sess.run(tf.initialize_all_variables())

#使用mini_batch来训练 
batch_size=100
#训练5轮
n_epoch=5
for epoch_i in range(n_epoch):
   #每一轮都是对一个batch_size进行训练
   for batch_i in range(mnist.train.num_examples//batch_size):
        batch_xs,batch_ys=mnist.train.next_batch(batch_size)
        sess.run(optimizer,feed_dict={x:batch_xs,y:batch_ys,keep_prob:0.5})

    #对所有mini_batch执行完一轮以后 打印准确率结果
    print (sess.run(accuracy,feed_dict={x:mnist.validation.images,y:mnist.validation.labels,keep_prob:0.5}))


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 卷积神经网络(CNN)是一种用于处理图像数据的深度学习算法,其核心思想是通过卷积运算来提取图像特征,并将这些特征映射到输出层进行分类或回归。 近年来,CNN在计算机视觉领域得到了广泛应用。例如,通过训练一个CNN模型来识别图像中的物体,可以实现自动驾驶车辆、安防监控、医疗影像分析等众多领域的应用。 为了让更多的人能够轻松地使用CNN,开发者们开发了基于谷歌开源的深度学习框架TensorFlow的CNN实现TensorFlow是一个用于构建和训练深度学习模型的强大平台。它提供了丰富的API和工具,使得开发者可以轻松地构建CNN模型,调试和优化算法。 在使用TensorFlow实现CNN时,我们需要定义模型的结构、损失函数和优化器等参数,并通过大量数据进行模型训练。在训练过程中,TensorFlow自动完成反向传播算法,更新模型参数,从而完成模型的优化。最后,我们可以通过在测试数据集上进行模型测试,评估模型的性能。 CNN在图像处理方面有着非常广泛的应用,而TensorFlow则为实现CNN提供了便利和支持。通过这种配合使用的方式,我们可以更加高效和精准地处理图像数据,提升图像处理的效率和质量。 ### 回答2: 随着人工智能领域的不断发展,图像处理作为其中非常重要的分支之一也逐渐得到了广泛的应用。在图像处理领域,卷积神经网络(Convolutional Neural Network,CNN)是一种被广泛采用的模型,而Tensorflow则是其中一种应用较为广泛的深度学习框架。下面将对这几个概念进行详细介绍。 CNN是一种专门用于图像处理的神经网络模型。它具备比传统神经网络更加优秀的处理图像的能力,通过卷积的方式对输入矩阵进行逐步筛选,能够提取更加高级的特征信息。这种模型一般由多个卷积层、池化层和全连接层构成。卷积层一般用于提取图像特征,而池化层则对图像进行降采样,降低处理的复杂度和运算量,全连接层则是将前面提取的特征信息进行进一步处理后输出结果。 Tensorflow则是由Google公司开发的一种开源的深度学习框架,可以用于搭建和训练各种深度学习模型。其中包含了各种常用的神经网络模型,如卷积神经网络、循环神经网络等。Tensorflow有着良好的可扩展性和灵活性,它使用静态计算图和动态计算图相结合的方式来执行计算,使得开发者能够更方便地进行调试和优化。 在使用CNN对图片进行分类和识别时,Tensorflow提供了一系列用于训练神经网络的接口和工具,使得使用者可以方便地调用和使用这些函数库。同时,Tensorflow还具备良好的分布式计算能力,可以将计算任务划分到多台计算机上进行并行计算,提高了神经网络训练的速度和效率。 综上所述,CNN卷积神经网络、图像和Tensorflow深度学习框架之间是存在着紧密的联系和关联的。在图像处理领域,CNN是一种优秀的模型,而Tensorflow则是应用广泛的深度学习框架,可以搭建出各种神经网络模型,并将其用于图像处理相关的任务中。同时,如何利用Tensorflow优化卷积神经网络也是图像领域研究的一个重要方向。 ### 回答3: CNN是一种常用于图像处理和识别的神经网络,它通过卷积核对图像进行特征提取,然后将提取的特征输入到全连接层进行分类或回归等任务。在CNN中,卷积和池化是两个基本操作。卷积通过滑动窗口在图像上提取局部特征,而池化则对特征进行降维处理,减少计算量和过拟合。 现在,越来越多的人使用TensorFlow框架来构建CNN模型。TensorFlow是一个开源的人工智能工具包,可以在各种平台上进行高效的数值计算。通过TensorFlow,我们可以方便地构建和训练CNN模型。TensorFlow提供了一组丰富的API,包括卷积、池化等常用的图像处理操作,以及自动求导、优化器等高级功能。 对于图像任务,CNN由于具有较强的特征提取能力和传递性,被广泛应用于图像分类、目标检测、人脸识别等领域。在图像分类任务中,我们可以使用一些经典的模型,如LeNet、AlexNet、VGG、GoogLeNet、ResNet等。这些模型都是通过对CNN进行改进和深化得到的,其中,ResNet是目前表现最好的模型之一,它成功解决了深度模型退化的问题。 除了图像外,CNN还可以用于文本、声音等数据的处理,例如文本分类、语音识别等任务。在这些任务中,CNN同样可以通过提取局部特征来获得更好的性能。 总之,CNN是一种常用的神经网络模型,用于图像处理和识别任务,TensorFlow则是一个优秀的框架,可用于构建和训练CNN模型。通过CNN和TensorFlow,我们可以进行准确、高效、自动化的图像处理和识别任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值