tensorflow学习心得2

tensorflow学习心得(2)

2018.4.22

上期我们说到tensorflow分两步,Graph和run。在公司用tensorflow搭了下lstm做分类的模型,结果很奇怪。同样的模型结构,我用Keras跑出来auc为0.7,而用tensorflow时loss一直跳,而且auc基本在0.5左右。然后在排错过程中,我想到了graph,把graph打出来后,发现了几个问题,如最后一层忘记加sigmoid激活。
尴尬!!!不过反映了tensorflow graph的一个好处,可以让我们像看图一样检查模型。。。
今天主要讲下常量,变量和占位符。
常量
a = tf.contant([3,6])#表示生成一个长度为2的向量a = [3,6],此时a是一个op,在sess.run之后才有值
#tf.zeros()
#tf.ones()
#都为常量
######------------------
#tf.random_normal(shape=,dtype=,name='')
#tf.random_uniform()
#以上也是常量,只不过是随机常量
变量
b = tf.Variable(2,name='scalar')#生成一个变量,并为该变量赋初值为2,仍在sess.run()后才有值为2。
#变量在使用之前要初始化!!!初始化变量有三种方式
#1)全部初始化
init = tf.global_variables_initializer()
sess.run(init)
#2)初始化部分变量
init_ab = tf.variables_initializer([a,b],name ='init_ab')
#3)初始化单个变量
sess.run(b.initializer)
#当然,此时b被初始化后是个Tensor,
print(b)#Tensor('Variable/....')
print(b.eval())#[[0.444,0.111,....],...,[...]],使用eval()输出变量内容

记得常量为一个op,而Variable()是一个类

占位符placeholder()

a = tf.placeholder(dtype,shape=,name='')
占位符就是个容器,先占个坑,里面什么都没有,在run的时候,可以通过
sess.run([a,b],feed_dict={a:a_data,b:b_data})来将值放到之前占的坑里。
一般我们用占位符来存放用于训练的数据,当然我们可以直接用数据来构建op,但是有点外行了。。用placeholder的方式,可以让我们数据送入的更自由,可以按自己需要的batch来送入。

简单总结一下,常量constant()用来构建一些在模型中不需要改变的量,变量Variable()一般用来构建权重等,需要不断更新,占位符placeholder一般用来作数据的容器。

猜你喜欢

转载自blog.csdn.net/u010976347/article/details/80040057