2022-03-09
本文整理自知之深炼丹专栏,转载请征得原作者同意。
本文所有代码都在原作者的仓库中
是一门基于大学的深度学习研究课程。
可视化
安装时自动安装,使用=tf..(‘./graph’,sess.graph)创建文件写入器,./graph为文件路径,sess.graph表示读入的图结构
简单示例:
import tensorflow as tf
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a,b)
with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs',sess.graph)
print(sess.run(x))
writer.close() # close the writer when you're done using it
打开终端运行程序,输入–=”./”,在网页输入:6006/,输入
常量类型
创建一个常量:
tf.constant(value, dtype=None, shape=None, name='const', verify_shape=False)
例如,创建一个一维向量和矩阵,然后相乘:
a = tf.constant([2,2], name='a')
b = tf.constant([[0,1],[2,3]], name='b')
x = tf.multiply(a, b, name='dot_production')
with tf.Session() as sess:
print(sess.run(x))
>> [[0,2]
[4,6]]
类似于 numpy 创建
p>
创建特殊值常量:
tf.zeros(shape, dtype=tf.float32, name=None)
tf.zeros_like(input_tensor, dtype=None, name=None, optimize=True)
tf.ones(shape, dtype=tf.float32,name=None)
tf.ones_like(input_tensor, dtype=None, name=None, optimize=True)
tf.fill([2,3],8)
>> [[8,8,8],[8,8,8]]
序列创建:
tf.linspace(start, stop, num, name=None)
tf.linspace(10.0, 13.0, 4)
>> [10.0, 11.0, 12.0, 13.0]
tf.range(start, limit=None, delta=1, dtyde=None, name='range')
tf.range(3, limit=18, delta=3)
>> [3,6,9,12,15]
与 numpy 不同,tf 不能迭代,即
for _ in tf.range(4): #TypeError
生成随机数
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
tf 目前常见于 numpy 数据类型:
tf.ones([2,2],np.float32)
>> [[1.0,1.0],[1.0,1.0]]
变量
计算图中存储常量定义,常量过多导致计算图加载慢。
a = tf.Variable(2, name='scalar')
b = tf.Variable([2,3], name='vector')
c = tf.Variable([[0,1][2,3]],name='matrix')
w = tf.Variable(tf.zeros([784,10]),name='weight')
对变量的几个操作
x = tf.Variable()
x.initializer # 初始化
x.eval() # 读取里面的值
x.assign() #分配值给该变量
在使用变量之前,必须先初始化,初始化可以看成是一个变量赋值操作
变量的初始化
一次性初始化:
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
部分初始化:
init_ab = tf.variables_initializer([a,b],name='init_ab')
with tf.Session() as sess:
sess.run(init_ab)
变量的初始化:
w = tf.Variables(tf.zeros([10,10]))
with tf.Session() as sess:
sess.run(w.initializer)
注意以下例程:
w = tf.Variable(10)
w.assign(100)
with tf.Session() as sess:
sess.run(w.initializer)
print(w.eval())
>> 10
答案是 10 而不是 100 的原因是,虽然定义了操作,但实际上是执行的,所以我们需要执行:
w = tf.Variable(10)
assign_op = w.assign(100)
with tf.Session() as sess:
sess.run(w.initializer)
sess.run(assign_op) # 赋值作为运算
print(w.eval())
>> 100
用变量定义变量
w = tf.Variable(tf.truncated_normal([700, 10]))
u = tf.Variable(w * 2)
独立
是相互独立的。
W = tf.Variable(10)
sess1 = tf.Session()
sess2 = tf.Session()
sess1.run(W.initializer)
sess2.run(W.initializer)
print(sess1.run(W.assign_add(10))) # >> 20
print(sess2.run(W.assign_sub(2))) # >> 8
print(sess1.run(W.assign_add(100))) # >> 120
print(sess2.run(W.assign_sub(50))) # >> -42
sess1.close()
sess2.close()
占位符()
有两个步骤,第一步是定义图形,第二步是计算。对于图中值暂时未知的量,可以定义为占位符,然后使用赋值
定义占位符
tf.placeholder(dtype, shape=None, name=None)
最好指定形状,便于调试
例行公事:
a = tf.placeholder(tf.float32, shape=[3])
b = tf.constant([5, 5, 5], tf.float32)
c = a + b
with tf.Session() as sess:
print(sess.run(c, feed_dict={a: [1, 2, 3]}))
您也可以为操作提供操作
a = tf.add(2, 3)
b = tf.multiply(a, 3)
with tf.Session() as sess:
print(sess.run(b, feed_dict={a: 2}))
>> 6
懒惰
azy 意味着您延迟创建变量,直到您必须使用它。我们来看看普通和懒惰的区别。
# normal loading
x = tf.Variable(10, name='x')
y = tf.Variable(20, name='y')
z = tf.add(x, y)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(10):
sess.run(z)
# lazy loading
x = tf.Variable(10, name='x')
y = tf.Variable(20, name='y')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(10):
sess.run(tf.add(x, y))
会在图中创建x和y变量,同时创建x+y操作,lazy只会创建这两个变量:
分类:
技术要点:
相关文章:
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容