tensorflow_tips

tensorflow tips

tensor

  • 实现不是直接采用数组形式,是对运算结果的引用
  • 没有真正保存数字,保存的是如何得到这些数字的运算过程
  • 属性: name shape type
  • 变量是特殊的张量
tensor function
 get_shape
 tf.assign(w1, w2, validate_shape=False) //赋值改变张量维度

Collection

  • 所有的变量都会自动加入GraphKeys.VARIABLES 集合 tf.all_variables函数可以获取所有变量
  • 变量声明函数中的trainable参数来区分需要优化的参数和其他参数, trainable = True该变量会加入GraphKeys.TRAINABLE_VARIABLES集合 tf.trainable_variables函数得到所有需要优化的变量

Session

  • session 拥有并管理tensorflow程序运行是的所有资源, 关闭会话回收资源
  • 使用会话模式2种:
sess = tf.Session()
sess.run(...)
sess.close()
// 可能程序异常导致close未运行,资源泄漏
with tf.Session() as sess:
    session.run(...)
// 通过python的上下文管理器管理会话,无须调用close函数自动释放
设置默认会话
sess = tf.Session()
with sess.as_default():
    print(result.eval())
sess = tf.Session()
print(sess.run(result))
# or
print(result.eval(session=sess))
#直接构建默认会话
sess = tf.InteractiveSession()
print(result.eval())
sess.close()
# 配置需要生成的会话
#可配值并行线程数,GPU分配策略,运算超时时间等
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)
常用函数
tf.matmul(x, w) //矩阵乘法
weight = tf.Variable(tf.randowm_normal([2,3], stddev=2)) //声明2x3矩阵变量, stddev 标准差

//随机数生成函数
tf.random_normal()
tf.truncated_normal()
tf.random_uniform() //均匀分布
tf.random_gamma() //Gamma分布

//常数生成函数
tf.zeros()
tf.ones()
tf.fill()
tf.constant()

//其它变量用来初始化
w2 = tf.Variable(weight.initialized_value())

//所有变量初始化
init_op = tf.initialize_all_variables()
sess.run(init_op)
//单个变量初始化
sess.run(w1.initializer)


//placeholder机制提供输入数据
x = tf.placeholder(tf.float32, shape(3, 2), name="input")
...
print(sess.run(y, feed_dict={x: [[0.7, 0.9], [1, 4], [5, 6]]})) //feed_dict 是一个map字典


//常用优化的方法
tf.train.GradientDescentOptimizer
tf.train.AdamOptimizer      //train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
tf.train.MomentumOptimizer
完整神经网络样例
import tensorflow as tf
from numpy.random import RandomState
batch_size = 8
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')
#前向传播
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
#损失函数和反向传播算法
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

#随机数生成模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
Y = [[int(x1+x2 < 1)] for (x1, x2) in X]

#创建会话运行程序
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
   # print(sess.run(w1))
   # print(sess.run(w2))

    STEPS = 5000
    for i in range(STEPS):
        start = (i * batch_size) % dataset_size
        end = min(start+batch_size, dataseet_size)  #防止最后一个batch数据不够溢出

        sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})

        if i % 1000 == 0:
            total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
            print("After %d training steps , cross entropy on all data is %g" %(i, total_cross_entropy))

    print(sess.run(w1))
    print(sess.run(w2))
After 0 training steps , cross entropy on all data is 0.0674925
After 1000 training steps , cross entropy on all data is 0.0163385
After 2000 training steps , cross entropy on all data is 0.00907547
After 3000 training steps , cross entropy on all data is 0.00714436
After 4000 training steps , cross entropy on all data is 0.00578471
[[-1.9618274   2.58235407  1.68203771]
 [-3.46817183  1.06982327  2.11788988]]
[[-1.8247149 ]
 [ 2.68546653]
 [ 1.41819501]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值