记录一些Tensorflow小知识点
来源:互联网 发布:网络盒子看电视不清晰 编辑:程序博客网 时间:2024/06/05 05:37
作者:xg123321123 - 时光杂货店
出处:http://blog.csdn.net/xg123321123/article/details/77882232
声明:版权所有,转载请联系作者并注明出处
1 Tensorflow 中feature map的计算
在Tensorflow中,padding的方式有2种:SAME
和 VALID
首先是计算公式
使用VALID时:
output=ceil(float(input−kernel+1)/stride) 使用SAME时:
output=ceil(float(input)/stride)
其次是讲解
- 对于
VALID
来说,实质上是没有填充,多余的元素则被丢弃,比如下面的input_width=13,只允许滑动2次,多余的元素全部丢掉 对于
SAME
来说,实质上是补全元素,比如下面的情况,允许滑动3次,但是需要补3个元素,左奇右偶,在左边补一个0,右边补2个0以上两者都是在input size为13,kernel size为6,stride为5的情况下进行
- 对于
以上信息是否正确,可自行实验
作为对比,将caffe的计算方式也给出来:
定义
输入:n∗c0∗w0∗h0
输出:n∗c1∗w1∗h1
其中c1 是生成的feature map个数,即num_output;生成的feature map尺寸,计算如下:
w_1 = (w_0 + 2*p-k)/s + 1
h_1 = (h_0 + 2*p-k)/s + 1其中
p 是padding的尺寸,k 是卷积核的尺寸;
由上式可知,如果p=(k−1)/2 ,则运算后,feature map的尺寸不变。
2 获取变量的shape
- tf.shape(x) #其中x可以是tensor或其他类型,返回是一个tensor
- x.get_shape() #只有tensor有这个方法, 返回是一个tuple
3 用reshape将数组平铺
- 函数原型:tf.reshape(tensor, shape, name=None)
- shape参数中的-1表示根据数组元素总数,自动计算出剩余的维度,shape参数只能有一个-1
- 当shape参数为
[-1]
时,表示将该数组完全平铺开来
4 conv2d中参数的含义
函数原型:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name参数用以指定该操作的name,与方法有关的一共五个参数:
- input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
- filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,filter的通道数要求与input的in_channels一致,有一个地方需要注意,第三维in_channels,就是参数input的第四维
- strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4,只有strides1和strides2有实际意义,具体指定了filter的尺寸,strides0=strides3=1则只是将其包装成一个合格的tensor
- padding:string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式
- use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,就是我们常说的feature map
- 栗子如下:
import tensorflow as tf #case 2 input = tf.Variable(tf.random_normal([1,3,3,5])) filter = tf.Variable(tf.random_normal([1,1,5,1])) op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID') with tf.Session() as sess: sess.run(tf.initialize_all_variables()) res = (sess.run(op)) print (res.shape)
5 使用指定的GPU及GPU显存
终端执行程序时设置使用的GPU
如果电脑有多个GPU,tensorflow默认全部使用。如果想只使用部分GPU,可以设置CUDA_VISIBLE_DEVICES。在调用python程序时,可以使用:CUDA_VISIBLE_DEVICES=1 python my_script.py
python代码中设置使用的GPU
如果要在python代码中设置使用的GPU(如使用pycharm进行调试时),可以使用下面的代码:import osos.environ["CUDA_VISIBLE_DEVICES"] = "2"#也可以用 with tf.device 创建一个设备环境, 这个环境下的 operation 都统一运行在环境指定的设备上,如: with tf.device('/gpu:2'): a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') c = tf.matmul(a, b) sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))#如果指定的设备不存在, 会收到 InvalidArgumentError 错误提示;下面的代码也是同样的指定效果init = tf.global_variables_initializer()config = tf.ConfigProto(device_count = {'GPU': 0})with tf.Session(config=config) as sess: sess.run(init)#而下面的代码可以让tensorFlow 自动选择一个存在并且支持的设备来运行sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True))#下面可以记录设备指派情况 sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
设置tensorflow使用的显存大小
定量设置显存
默认tensorflow是使用GPU尽可能多的显存。可以通过下面的方式,来设置使用的GPU显存:gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
可以按照需要,设置不同的值,来分配显存;上面分配给tensorflow的GPU显存大小为:GPU实际显存*0.7。
按需设置显存
上面的只能设置固定的大小。如果想按需分配,可以使用allow_growth参数gpu_options = tf.GPUOptions(allow_growth=True)sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
6 打印tensor的值
使用tensorflow时,如果直接print
某个tensor,得到的是其shape信息。
如果想要打印tensor的值,需要借助class tf.Session或者class tf.InteractiveSession。
因为在建立graph的时候,只建立tensor的结构形状信息,并没有执行数据的操作。
- 首先是class tf.Session
运行tensorflow操作的类,其对象封装了执行操作对象和评估tensor数值的环境,在定义好所有的数据结构和操作后,其最后运行。
import tensorflow as tf # Build a graph. a = tf.constant(5.0) b = tf.constant(6.0) c = a * b # Launch the graph in a session. sess = tf.Session() # Evaluate the tensor `c`. print(sess.run(c))
- 其次是class tf.InteractiveSession
用于交互上下文的session,便于输出tensor的数值。与上一个Session相比,其有默认的session执行相关操作,比如:Tensor.eval(), Operation.run()。
Tensor.eval()是执行这个tensor之前的所有操作,Operation.run()也是。
import tensorflow as tf a = tf.constant(5.0) b = tf.constant(6.0) c = a * b with tf.Session(): print(c.eval())
本篇博客参考自以下博客:
TensorFlow与caffe中卷积层feature map大小计算
tensorflow conv2d的padding解释以及参数解释
tensorflow使用指定的GPU及GPU显存
学习TensorFlow,打印输出tensor的值
- 记录一些Tensorflow小知识点
- android开发一些小知识点记录
- 记录神经网络中一些小知识点
- 随笔,记录一下发现的一些小知识点
- Android开发中的一些小知识点记录(1-20)
- Android开发中的一些小知识点记录(21-40)
- Android开发中的一些小知识点记录(41-60)
- tensorflow知识点小总结2
- 若干小知识点记录
- 零碎小知识点记录
- 小知识点记录
- 小知识点记录
- android小知识点记录
- Android 小知识点记录
- 小知识点记录
- JAVA小知识点记录
- 小知识点记录
- 小知识点记录
- -Java基础-Java介绍
- C++ filesystem
- MySQL 读取 frm 源码
- MongoDb下载及安装
- Python机器学习-感知机原理及代码实现
- 记录一些Tensorflow小知识点
- AES加密算法的C++实现
- Spring事务的传播行为
- flann
- HDOJ 1010迷宫 +dfs+奇偶剪枝
- LeetCode:419. Battleships in a Board
- @Transactional 事务注解
- 面试书单
- 移动端页面在ios中图片不显示