【tensorflow】tf.nn 常用函数介绍: conv2d/max_pool/dropout/softmax

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 03:53   11   0

tf.nn常用函数介绍: conv2d()、max_pool()、softmax()、dropout()


转自:

tf.nn.conv2d函数和tf.nn.max_pool函数介绍 https://www.cnblogs.com/smartwhite/p/7819689.html

tf.nn.dropout防止过拟合 https://blog.csdn.net/huahuazhu/article/details/73649389

tensorflow常用函数之tf.nn.softmax https://my.oschina.net/u/780234/blog/1588827


1. tf.nn.conv2d()

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

介绍参数:

input:指卷积需要输入的参数,具有这样的shape[batch, in_height, in_width, in_channels],分别是[batch张图片, 每张图片高度为in_height, 每张图片宽度为in_width, 图像通道为in_channels]。

filter:指用来做卷积的滤波器,当然滤波器也需要有相应参数,滤波器的shape为[filter_height, filter_width, in_channels, out_channels],分别对应[滤波器高度, 滤波器宽度, 接受图像的通道数, 卷积后通道数],其中第三个参数 in_channels需要与input中的第四个参数 in_channels一致,out_channels第一看的话有些不好理解,如rgb输入三通道图,我们的滤波器的out_channels设为1的话,就是三通道对应值相加,最后输出一个卷积核。

strides:代表步长,其值可以直接默认一个数,也可以是一个四维数如[1,2,1,1],则其意思是水平方向卷积步长为第二个参数2,垂直方向步长为1.其中第一和第四个参数我还不是很明白,请大佬指点,貌似和通道有关系。

padding:代表填充方式,参数只有两种,SAME和VALID,SAME比VALID的填充方式多了一列,比如一个3*3图像用2*2的滤波器进行卷积,当步长设为2的时候,会缺少一列,则进行第二次卷积的时候,VALID发现余下的窗口不足2*2会直接把第三列去掉,SAME则会填充一列,填充值为0。

use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true。大概意思是是否使用gpu加速,还没搞太懂。

name:给返回的tensor命名。给输出feature map起名字。


2.tf.nn.max_poo()

tf.nn.max_poo(value, ksize, strides, padding, name=None)

value:池化的输入,一般池化层接在卷积层的后面,所以输出通常为feature map。feature map依旧是[batch, in_height, in_width, in_channels]这样的参数。

ksize:池化窗口的大小,参数为四维向量,通常取[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1。ps:估计面tf.nn.conv2d中stries的四个取值也有 相同的意思。

stries:步长,同样是一个四维向量。

padding:填充方式同样只有两种不重复了。


3.tf.nn.dropout防止过拟合

tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层

Dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。示意图如下:


但在测试及验证中:每个神经元都要参加运算,但其输出要乘以概率p。

tf.nn.dropout函数说明

tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None)

上面方法中常用的是前两个参数:

第一个参数x:指输入

第二个参数keep_prob: 设置神经元被选中的概率,在初始化时keep_prob是一个占位符,  keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5

第五个参数name:指定该操作的名字。

三、使用举例:

1dropout必须设置概率keep_prob,并且keep_prob也是一个占位符,跟输入是一样的

keep_prob = tf.placeholder(tf.float32)

2train的时候才是dropout起作用的时候,traintest的时候不应该让dropout起作用

sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 0.5})

train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob: 1})

test_result = sess.run(merged, feed_dict={xs: X_test, ys: y_test, keep_prob: 1})


4.tf.nn.softmax()

通过Softmax回归,将logistic的预测二分类的概率的问题推广到了n分类的概率的问题。通过公式

可以看出当月分类的个数变为2时,Softmax回归又退化为logistic回归问题.

下面的几行代码说明一下用法

# -*- coding: utf-8 -*-
import tensorflow as tf

A = [1.0,2.0,3.0,4.0,5.0,6.0]

with tf.Session() as sess:
        print sess.run(tf.nn.softmax(A))

结果

[ 0.00426978  0.01160646  0.03154963  0.08576079  0.23312201  0.63369131]



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP