tensorflow学习笔记1——计算图模型
看慕课,内容太多,看了2遍很多细节还是没记住。
现在开始启用笔记……
1、命令式编程
类似python:
x=2
y=3
b=1
z=x*y+b
2、计算图模型
x=T.dscalar(‘x’)
y=T.dscalar(‘y’)
b=T.constant(1)
z=x*y+b
f=function([x,y], z)
运行f(2,3)的得array(7.0)
它得计算图模型如下:
tensorflow也是这样,先构建计算图,输入数值后再计算,好处是得到计算图后便于优化,可以可视化,方便存取。缺点是中间结果很难监视。
#placeholder是一个占位符
x = tf.placeholder(tf.float32,[None, 3072])
y = tf.placeholder(tf.int64, [None])
这里的None表示可变、不固定的值,因为后面会用到batch_size。
w = tf.get_variable('w', [x.get_shape()[-1], 1],
initializer=tf.random_normal_initializer(0,1)) #用正态分布的值为w做初始化
b = tf.get_variable('b', [1],
initializer=tf.constant_initializer(0.0) )#b初始化为0
#[None,3072] * [3072, 1] = [None,1]
#y_是内积值,矩阵乘法
y_ = tf.matmul(x, w) + b
#[None,1]
#p_y_1是概率值,y==1的概率
p_y_1 = tf.nn.sigmoid(y_)
w的shape是(3072,1),b的shape是1,y_的shape就是[none, 1], p_y_1表示y_==1的概率,shape也是[none,1]。
下面要求loss,需要把真实值和预测值相减,然后开方,再求平均。
所以要把真实值和预测值的shape和type要统一一下。
预测值上面我们看到p_y_1的shape是[none, 1],所以真实值要经过一些变换:
y_reshaped = tf.reshape(y, (-1,1))
#y和y_的类型不一样,y是int64,y_是float32,所以要转成一致的
y_reshaped_float = tf.cast(y_reshaped,tf.float32)
补充一下reshape和cast用法: