主要步骤:
- Initialize variables
- Start your own session
- Train algorithms
- Implement a Neural Network
一、初始化变量
1.定义变量的语法是:tf.Variable(变量或变量表达式,name=''(设置变量名))
2.进行计算时,一定要注意启动session
a=tf.constant(3)
b=tf.constant(10)
c=tf.multiply(a,b)
session=tf.Session()
print(session.run(c))
3.feed dictionary,用feed_dict来储存placeholder的值
x = tf.placeholder(tf.int64, name = 'x')
print(sess.run(2 * x, feed_dict = {x: 3}))
sess.close()
定义X不需要刚开始就确定其值,当启动Session时feed data即可,实现了对placefolder的赋值
4、Linear function
Y=wX+b
x=tf.Varable(np.random.randn(3,1),name="X")问:到底在name处的引号是单引号还是双引号
def linear_function():
X = tf.Variable(np.random.randn(3,1),name="X")
W = tf.Variable(np.random.randn(4,3),name="W")
b = tf.Variable(np.random.randn(4,1),name="b")
Y = tf.add(tf.matmul(W,X),b)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
result =sess.run(Y)
sess.close()
return result
注:需要先初始化变量才能用run(init)再给各变量赋值,然后在run需要运行的结果
5.计算sigmoid函数
def sigmoid(z):
x = tf.placeholder(tf.float32,name="x") #创建placeholders
sigmoid = tf.sigmoid(x) #聚化计算图对应的操作
sess=tf.Session()#创建session
result = sess.rrun(sigmoid,feed_dict={x:z})#运行session
return result
在这里并不需要初始化参数,可能是没有变量 ,
其次,这里的feed_dict的值是需要从输入里传入的
6.计算代价函数
def cost(logits, labels):
z = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
cost = tf.nn.sigmoid_cross_entropy_with_logits(logits = z,labels = y)
sess = tf.Session()
cost = sess.run(cost,feed_dict={z:logits,y:labels})
sess.close()
return cost
7.使用热点编码
def one_hot_matrix(labels, C):
C = tf.constant(value=C,name='C')
one_hot_matrix = tf.one_hot(labels,C,axis=0)#注意在这,因为是对每列进行编码,即每个实例,所以设定axis=0)
sess = tf.Session()
one_hot = sess.run(one_hot_matrix)
sess.close()
想通一个问题:当name只有一个字母时,用单引号,如果是一个词语就用双引号
但!又有一个问题:为啥在这里有常量,却不进行初始化?喔!难道 init = tf.global_variables_initializer() 这个只是初始化变量
常量不必初始化吧!!
8.初始化零矩阵和单位矩阵
def ones(shape):
ones = tf.ones(shape)
sess = tf.Session()
ones = sess.run(ones)
sess.close()
return ones
这里的传值和普通的传值一样,只有placeholder存在时才使用feed_dict
二、建立神经网络
步骤:创建计算图→运行计算图
1.创建placeholders
def create_placeholders(n_x, n_y):
X = tf.placeholder(tf.float32,shape=[n_x,None])
Y = tf.placeholder(tf.float32,shape=[n_y,None])
return X, Y
2.初始化参数
xavier_initializer( uniform=True, seed=None, dtype=tf.float32 )
该函数返回一个用于初始化权重的初始化程序 “Xavier” 。
这个初始化器是用来保持每一层的梯度大小都差不多相同。
参数:
uniform: 使用uniform或者normal分布来随机初始化。
seed: 可以认为是用来生成随机数的seed
dtype: 只支持浮点数。