关于的tensorflow的记录
来源:互联网 发布:字体设计软件下载 编辑:程序博客网 时间:2024/06/06 17:36
第一个##################
import tensorflow as tfimport numpy as np#version is 0.5a = np.ones([100],dtype=np.float32)x = tf.placeholder(dtype=tf.float32,shape = [100])w = tf.Variable(tf.ones([100,100]))out = tf.mul(x,w)sess = tf.Session()init = tf.initialize_all_variables()sess.run(init)def f(): return tf.mul(x,w)for i in range(1000000): sess.run(f(),feed_dict={x:a}) print ifor i in range(1000000): sess.run(out,feed_dict={x:a}) print i
上面的代码,两个for循环都是运行得出out,但是第一个for循环会不断的建立新的计算节点并计算,即tf.mul(x,w),导致内存不断消耗,而第二个for循环则只会建立一一个计算节点,之后的调用仅仅计算,而不新建。
因此,除非符合我们的意图,否则不要使用以下形式建立计算节点
for i in range(1000000): sess.run(f(),feed_dict={x:a}) print i
第二个######################
if [False]:
跟
if True:
是一样的。
===================================================
而
if False:
跟
if None:
是一样的。
================batch_normalization=============================
tf里面有两个相关的实现,分别是
tensorflow.contrib.layers.batch_norm()和
tensorflow.layers.batch_normalization()
但tensorflow.layers.batch_normalization()似乎是以奇怪的方式在运作。
例如
import tensorflow as tffrom tensorflow.contrib.layers import batch_norma = tf.get_variable('a',[1,2],dtype=tf.float32,initializer=tf.random_uniform_initializer(-10.,10.))b = tf.get_variable('b',[1,2],dtype=tf.float32,initializer=tf.random_uniform_initializer(-10.,10.))c = batch_norm(a)cc = tf.layers.batch_normalization(b)with tf.Session() as sess: tf.global_variables_initializer().run() for i in range(1): print sess.run(c) print sess.run(cc)
结果是
[[ 0. 0.]]
[[-0.82290715 7.70175266]]
按理说,第一个结果是对的,因为对于batch=1的数据,输出0均值,1方差的结果是全部等于0。但第二个结果就很奇怪了。
再把batch数改成5,结果是:
[[ 0.66675264 -0.31775036]
[ 0.55268157 0.8353436 ]
[-0.31323212 1.0280273 ]
[ 0.91457742 -1.76017237]
[-1.82077944 0.2145521 ]]
[[-1.72455609 -7.3269577 ]
[ 1.20964813 -6.78956413]
[-7.1524272 -5.85298967]
[ 9.05802536 5.26228619]
[ 9.85200882 7.94727564]]
仍然是第一个方法的结果比较正常。
原来,两个方法都有一个参数:training。batch_norm()方法默认training为true,而batch_normalization()默认training为false。当training为true时,会使用样本的均值和方差进行正规化,而当training为false时,会使用累积的mean的均值和方差进行正规化。
===========================梯度=================================
计算梯度主要有tf.gradients()和 tf.train.AdamOptimizer(0.01).compute_gradients(),其中tf.gradients()中有个参数是grad_ys,
他的作用是:当计算图有多个输出单元(例如输出是[1,2]),会对各个单元对应于每个变量的梯度求和,用文档的话说就是:sum(dy/dx)。有的时候我们需要对不同的输出单元取不同的权重,而grad_ys就是这个权重参数。
但是呢,明显的我们只要用权重参数乘以输出单元,应该能得到一样的梯度,也就是说,这个grad_ys参数并不是必要的,是不是这样呢?试了才知道
import numpy as npimport tensorflow as tfimport mathfrom tensorflow.contrib import layersa = tf.constant([[2.,2.]])aa = tf.get_variable(name='aa',shape=[1,2],dtype=tf.float32,initializer=tf.constant_initializer(2))b = tf.constant([[2.,3.],[4.,5.]])c = tf.matmul(aa,b)with tf.Session() as sess: tf.global_variables_initializer().run() print sess.run(tf.gradients(c, aa)) print sess.run(tf.gradients(c,aa,[a])) print sess.run(tf.gradients(c*a, aa, )) print sess.run(tf.train.AdamOptimizer(0.01).compute_gradients(a*c)) print sess.run(tf.train.AdamOptimizer(0.01).compute_gradients(c))
结果是
[array([[ 5., 9.]], dtype=float32)]
[array([[ 10., 18.]], dtype=float32)]
[array([[ 10., 18.]], dtype=float32)]
[(array([[ 10., 18.]], dtype=float32), array([[ 2., 2.]], dtype=float32))]
[(array([[ 5., 9.]], dtype=float32), array([[ 2., 2.]], dtype=float32))]
所以答案是: 是的
- 关于的tensorflow的记录
- tensorflow关于二维码的验证
- 关于tensorflow的好博客
- 关于TensorFlow的使用1
- Tensorflow关于feed的问题
- 安装keras和tensorflow的一些记录
- Tensorflow学习记录10--tensorboard的使用
- 关于调色板的记录
- 关于Canvas的记录
- 关于深度学习框架TensorFlow的调研
- tensorflow中关于队列使用的实验
- TensorFlow中关于MNIST的学习
- 关于tensorflow的学习博客摘录
- 关于TensorFlow使用的一些笔记
- stackoverflow关于tensorflow非常好的问题解答
- TensorFlow关于 SSE AVX的Warning问题
- 关于tensorflow的基本语法知识
- Tensorflow入门 :关于数组的操作
- vscode编辑markdown公式预览
- 1032. 挖掘机技术哪家强(20)
- [kuangbin带你飞]专题一 简单搜索 -G
- Python数据分析之pandas学习(二)
- 数据结构与算法面试题80道
- 关于的tensorflow的记录
- 分治&DP
- gdb调试命令的使用及总结
- radio选中当前div变色,其余不变
- PLSR(偏最小二乘回归浅析)
- 2017上半年课程设计数组斐波那契
- 2017年腾讯春招实习笔试经验及总结(后台开发方向)
- 详细的Log4j使用教程
- ActiveMQ学习了解