发布网友 发布时间:2022-04-24 22:47
共2个回答
懂视网 时间:2022-05-10 19:32
本篇文章主要介绍了浅谈tensorflow1.0 池化层(pooling)和全连接层(dense),现在分享给大家,也给大家做个参考。一起过来看看吧池化层定义在tensorflow/python/layers/pooling.py.
有最大值池化和均值池化。
1、tf.layers.max_pooling2d
max_pooling2d( inputs, pool_size, strides, padding='valid', data_format='channels_last', name=None )
inputs: 进行池化的数据。
pool_size: 池化的核大小(pool_height, pool_width),如[3,3]. 如果长宽相等,也可以直接设置为一个数,如pool_size=3.
strides: 池化的滑动步长。可以设置为[1,1]这样的两个整数. 也可以直接设置为一个数,如strides=2
padding: 边缘填充,'same' 和'valid‘选其一。默认为valid
data_format: 输入数据格式,默认为channels_last ,即 (batch, height, width, channels),也可以设置为channels_first 对应 (batch, channels, height, width).
name: 层的名字。
例:
pool1=tf.layers.max_pooling2d(inputs=x, pool_size=[2, 2], strides=2)
一般是放在卷积层之后,如:
conv=tf.layers.conv2d( inputs=x, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.relu) pool=tf.layers.max_pooling2d(inputs=conv, pool_size=[2, 2], strides=2)
2.tf.layers.average_pooling2d
average_pooling2d( inputs, pool_size, strides, padding='valid', data_format='channels_last', name=None )
参数和前面的最大值池化一样。
全连接dense层定义在 tensorflow/python/layers/core.py.
3、tf.layers.dense
dense( inputs, units, activation=None, use_bias=True, kernel_initializer=None, bias_initializer=tf.zeros_initializer(), kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, trainable=True, name=None, reuse=None )
inputs: 输入数据,2维tensor.
units: 该层的神经单元结点数。
activation: 激活函数.
use_bias: Boolean型,是否使用偏置项.
kernel_initializer: 卷积核的初始化器.
bias_initializer: 偏置项的初始化器,默认初始化为0.
kernel_regularizer: 卷积核化的正则化,可选.
bias_regularizer: 偏置项的正则化,可选.
activity_regularizer: 输出的正则化函数.
trainable: Boolean型,表明该层的参数是否参与训练。如果为真则变量加入到图集合中 GraphKeys.TRAINABLE_VARIABLES (see tf.Variable).
name: 层的名字.
reuse: Boolean型, 是否重复使用参数.
全连接层执行操作 outputs = activation(inputs.kernel + bias)
如果执行结果不想进行激活操作,则设置activation=None。
例:
#全连接层 dense1 = tf.layers.dense(inputs=pool3, units=1024, activation=tf.nn.relu) dense2= tf.layers.dense(inputs=dense1, units=512, activation=tf.nn.relu) logits= tf.layers.dense(inputs=dense2, units=10, activation=None)
也可以对全连接层的参数进行正则化约束:
代码如下:
dense1 = tf.layers.dense(inputs=pool3, units=1024, activation=tf.nn.relu,kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003))
热心网友 时间:2022-05-10 16:40
卷积神经网络(convolutional neural network, CNN),最早是19世纪60年代,生物学家对猫视觉皮层研究发现:每个视觉神经元只会处理一小块区域是视觉图像,即感受野。后来到了80年代,日本科学家提出了神经认知机(Neocognitron)的概念,也可以算作是卷积神经网络最初的实现原型,在CS231n的课上说过,卷积神经网络不是一夜产生的,从这个发展过程中我们就可以看出,确实是这样的。卷积神经网络的要点就是局部连接(Local Connection)、权值共享(Weight sharing)和池化层(Pooling)中的降采样(Down-Sampling)。
比如 下面 是tensorflow卷积定义 relu(W*X+B) W 矩阵 * X矩阵 + B矩阵 = W 权重variable变量 * X (placeholder占位符外部输入)variable变量 + B偏重变量,因为深度学习 会自动 不断地计算loss损失 BP 来调整 w b 所以 w b初始化 可以随便 全部都是0 都行 ,所以 其实 就是 X 以及 Y 对于 X来说其实我们知道 就是 我们图像数据 Y 是图像的标签,但是Y需要转为数学可以计算的值,所以采用one-hot 数组记录 标签的索引就行,比如 xx1 xx2 xx3 相应的y1=[1,0,0] y2=[0 1 0] y3=[0 0 1]
那么 其实 就是 X 图像的像素 通过外部输入 placeholder占位符 Y值 外部输入 通过 placeholder占位符
我们知道 W*X 矩阵 相乘 必须 符合 MXN NXM =MXM 也就是说W的 列 必须 与 X的行数目相同 这是要注意的,所以上一张shape来规范维度计算 ,下面是一个卷积层 定义 relu(wx+b) 下面是tensorflow来表示relu(wx+b)的公式
其中要注意参数 strides 是卷积滑动的步长 你可以配置更多的系数,
下面继续 讲X [None ,w*h] 对于每一个 w*h 是一个矩阵 每一层的w 也是一个矩阵 每一层的 b也是一个矩阵 ,每一层的输出y1 也是一个矩阵 y=[w*h]*w+b 为了减少系数,我们使用卷积,把它转换成MXN的值 ,这里就是跟全连接层的不同,使用了卷积转换成了一个MXN的卷积特征 而全连接层就是 y=wx+b (这里省略了那些relu(wx+b) tanh(wx+b))
所以我们现在来看看每一层的w 定义
因为卷积层的w是需要 与 w*h 提取的MXK来做矩阵相乘 所以 他是跟卷积核相关 以及 输入 输出 相关,对于每一张图像