82、TensorFlow教你如何构造卷积层

'''
Created on 2017年4月22日

@author: weizhen
'''
import tensorflow as tf
#通过tf.get_variable的方式创建过滤器的权重变量和偏置变量,上面介绍了卷积层
#的参数个数只和过滤器的尺寸、深度以及当前层节点矩阵的深度有关,所以这里声明的参数变量
#是一个四维矩阵,前面两个维度代表了过滤器的尺寸,第三个维度表示了当前层的深度。第四个维度表示过滤器的深度
filter_weight=tf.get_variable('weights',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1))
#和卷积层的权重类似,当前层矩阵上不同位置的偏置项也是共享的,所以总共有下一层深度个不同的偏置项
biases=tf.get_variable('biases',[16],initializer=tf.constant_initializer(0.1))
#tf.nn.conv2d提供了一个非常方便的函数来实现卷积层前向传播的算法,
#这个函数的第一个输入为当前层的节点矩阵,注意这个矩阵是一个四维矩阵,后面三个维度对应一个节点矩阵
#第一个维度对应一个输入batch。比如在输入层,input[0,:,:,:]表示第一张图片
#input[1,:,:,:]表示第二张图片,以此类推
#tf.nn.conv2d第二个参数提供了卷积层的权重,
#第三个参数为不同维度上的步长。虽然第三个参数提供的是一个长度为4的数组,但是第一维和最后一维的数字
#要求一定是1.这是因为卷积层的步长只对矩阵的长和宽有效。最后一个参数是填充padding的方法
#Tensorflow中提供SAME或是VALID两种选择。其中SAME表示添加全0填充,"VALID"表示不添加
conv=tf.nn.conv2d(input,filter_weight,strides=[1,1,1,1],padding='SAME')

#tf.nn.bias_add提供了一个方便的函数给每一个节点加上偏置项,注意这里不能直接使用加法
#因为矩阵上不同位置上的节点都需要加上同样的偏置项
bias=tf.nn.bias_add(conv,biases)
#将计算结果通过ReLU激活函数完成去线性化
actived_conv=tf.nn.relu(bias)



#池化层
#tf.nn.max_pool实现了最大化池化层的前向传播过程,它的参数和tf.nn.conv2d函数类似
#ksize提供了过滤器的尺寸,strides提供了步长信息,padding提供了是否使用全0填充
pool=tf.nn.max_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')

卷积层是神经网络中用于对图像提取特征的结构,有点像高斯滤波去对图像进行平滑处理

不过这里的卷积层要提取的是图像的特征,而且提取图像的算子的值是提前没有确定的

需要通过神经网络的训练来给计算出来

转载于:https://www.cnblogs.com/weizhen/p/6751683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow中的卷积层是用于处理图像和其他2D数据的常用层。它主要用于提取输入数据的局部特征,通过在输入数据上滑动一个可学习的滤波器(卷积核)来实现。以下是使用TensorFlow创建卷积层的基本步骤: 1. 定义输入张量:首先,您需要定义一个输入张量来表示待处理的数据。这可以是一个图像、特征图或其他2D数据。 2. 定义卷积核:接下来,您需要定义一个卷积核作为卷积操作的参数。卷积核是一个小的二维张量,它包含一些可学习的权重。 3. 创建卷积层:使用TensorFlow的`tf.keras.layers.Conv2D`类可以创建一个卷积层。您可以指定卷积核的数量、大小、步幅、填充等参数。 4. 运行卷积操作:将输入张量传递给卷积层,然后通过调用`call`方法执行卷积操作。该方法将返回一个特征图,其中每个值对应输入数据中的一个局部特征。 5. 参数学习:在训练过程中,卷积层中的权重将根据模型的损失函数进行更新,以便自动学习有助于任务的特征。 下面是一个示例代码片段,展示了如何使用TensorFlow创建一个简单的卷积层: ```python import tensorflow as tf # 定义输入张量(假设输入是一张28x28的灰度图像) input_shape = (28, 28, 1) inputs = tf.keras.Input(shape=input_shape) # 创建卷积层 num_filters = 32 kernel_size = (3, 3) conv_layer = tf.keras.layers.Conv2D(num_filters, kernel_size, activation='relu', padding='same') # 执行卷积操作 outputs = conv_layer(inputs) # 打印输出特征图的形状 print(outputs.shape) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值