tensorflow谷歌框架实战学习笔记第三章
-
1.计算图的使用
通过tf.get_default_graph可以获取当前默认的计算图
2.会话
会话拥有并管理Tensorflow程序用形式所需资源
推进创建会话法方式
with tf.Sesson() as sess
sess.run(…)
3.前向传播算法
4.反向传播算法
通过反向传播算法来调整神经网络参数的取值使得差距可以被缩小,tensnsoflow支持7种不同的优化器,常用的三种:tf.train.GradientDescentOptimizer、tf.train.AdamOptimizer和tf.train.MomentumOptimizer,通过运行sess.run(train_step)
5.完整神经网络杨莉程序来解决二分类问题
--coding:utf-8--
import tensorflow as tf
from numpy.random import RandomState
#定义训练数据batch的大小
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))
#在shape的一个维度上使用None可以方便使用不打的batch。训练时需要把数据分成比较小的batch,但是在测试时,可以
#一次性使用全部数据。
x = tf.placeholder(tf.float32, shape=(None,2), name=‘x-inut’)
y_ = tf.placeholder(tf.float32, shape=(None,1), name=‘x-inut’)
#神经网络前向传播
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)
#0表示负样本,1是表示正样本
Y = [[int(x1 + x2 < 1)] for (x1 ,x2) in X]
with tf.Session() as sess:
init_op = tf.initialize_all_variables()
#初始化变量
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,dataset_size)
#通过选取的样本训练神经网络并更新参数
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 ("经过 %d train steps后,cross entropy on all data is %g"%(i,total_cross_entropy))
print(sess.run(w1))
print(sess.run(w2))
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
[[-0.8113182 ]
[ 1.4845988 ]
[ 0.06532937]]
经过 0 train steps后,cross entropy on all data is 0.0674925
经过 1000 train steps后,cross entropy on all data is 0.0163385
经过 2000 train steps后,cross entropy on all data is 0.00907547
经过 3000 train steps后,cross entropy on all data is 0.00714436
经过 4000 train steps后,cross entropy on all data is 0.00578471
[[-1.9618275 2.582354 1.6820377]
[-3.4681718 1.0698231 2.11789 ]]
[[-1.824715 ]
[ 2.6854665]
[ 1.418195 ]]