Tensorflow入门之Google实战——chapter03

# 《TensorFlow实战Google深度学习框架》03 TensorFlow入门
# win10 Tensorflow1.0.1 python3.5.3

# filename:DeepLearning/TensorFlowbook/TensorFlow入门/chapter03/ts03.py

'''
tensorflow的计算模型:计算图--tf.Graph
tensorflow的数据模型:张量--tf.Tensor
tensorflow的运行模型:会话--tf.Session
tensorflow可视化工具:TensorBoard
通过集合管理资源:tf.add_to_collection、tf.get_collection
Tensor主要三个属性:名字(name)、维度(shape)、类型(type)
会话Session需要关闭才能释放资源,通过Python的上下文管理器 with ,可以自动释放资源
'''

import tensorflow as tf;

print("tensorflow version: ", tf.VERSION);  # 1.0.1

def func00_def():
    a = tf.Variable([1.0, 2.0], name="a");  # 变量
    b = tf.Variable([2.0, 3.0], name="b");
    # result = tf.placeholder(tf.float32, shape=(1, 2), name="result");
    g = tf.Graph();  # 图
    with tf.Session() as sess:  # 会话
        with g.device('/cpu:0'):  # 设备
            init_op = tf.global_variables_initializer();
            sess.run(init_op);
            result = a + b;
            print(sess.run(result));


def func01_constant():
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1));
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1));

    x = tf.constant([[0.7, 0.9]]);
    a = tf.matmul(x, w1);
    y = tf.matmul(a, w2);

    sess = tf.Session();
    init_op = tf.global_variables_initializer();

    sess.run(init_op);

    print(sess.run(y));


def func02_placeholder():
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1));
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1));

    x = tf.placeholder(tf.float32, shape=(1, 2), name="input");
    a = tf.matmul(x, w1);
    y = tf.matmul(a, w2);

    sess = tf.Session();
    init_op = tf.global_variables_initializer();

    sess.run(init_op);

    # placeholder的赋值
    print(sess.run(y, feed_dict={x: [[0.7, 0.9]]}));


func00_def();
func01_constant();
func02_placeholder();
tensorflow version:  1.4.0
[3. 5.]
[[-1.4563754]]
[[-0.8372875]]
#EX04以上全是关于正向传播的程序,以下提及一些关于反向传播的必要(loss function,learning rate,optimizer)
cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))) #定义loss function
learning_rate=0.001 #定义learning rate
train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy) #定义反向传播算法来优化神经网络中的参数

EX01
import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=2))#初试化权重矩阵(生成相应大小的两个随机正态分布,均值为0,方差为1)
x=tf.constant([[0.7,0.9]]) #给定输入值
a=tf.matmul(x,w1) #计算隐层的值
y=tf.matmul(a,w2) #计算输出值
sess=tf.Session() #建立一个会话,用于打印所有的输出值
sess.run(w1.initializer)
sess.run(w2.initializer)#对w1,w2进行初始化
print(sess.run(y))
sess.close()
[[2.2322333]]
#EX02 对初始化权重矩阵进行统一初始化(针对于模型中参数特别多的时候)
import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=2))#初试化权重矩阵(生成相应大小的两个随机正态分布,均值为0,方差为1)
x=tf.constant([[0.7,0.9]]) #给定输入值
a=tf.matmul(x,w1) #计算隐层的值
y=tf.matmul(a,w2) #计算输出值
sess=tf.Session() #建立一个会话,用于打印所有的输出值
init_op=tf.global_variables_initializer() 
sess.run(init_op) #在此利用以上两行对其中涉及的参数进行统一初始化
print(sess.run(y))
sess.close()
[[2.2322333]]
#EX03 利用placeholder机制对一个接着一个Batch的输入进行规范
  #在输入x时需要用到placeholder机制,但是同时需要在最后给一个feed_dict字典对一个batch的值进行提供
import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=2))#初试化权重矩阵(生成相应大小的两个随机正态分布,均值为0,方差为1)
x=tf.placeholder(tf.float32,shape=(3,2),name="input") #在此如果改为size=(n,2),则为同时计算n个样例的正向传播值。
a=tf.matmul(x,w1) #计算隐层的值
y=tf.matmul(a,w2) #计算输出值
sess=tf.Session() #建立一个会话,用于打印所有的输出值
init_op=tf.initialize_all_variables()
sess.run(init_op) #在此利用以上两行对其中涉及的参数进行统一初始化
print(sess.run(y,feed_dict={x:[[0.7,0.9],[0.1,0.4],[0.5,0.8]]})) #在运行时利用feed_dict
sess.close()
[[2.2322333 ]
 [0.90483624]
 [1.9336841 ]]
#EX05 以下是一个完整的简单的神经网络的程序
import tensorflow as tf
from numpy.random import RandomState
batch_size=8 #定义训练数据batch的大小
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=2))#初试化权重矩阵(生成相应大小的两个随机正态分布,均值为0,方差为1)
x=tf.placeholder(tf.float32,shape=(None,2),name='x-input') #在第一个维度上利用None,可以方便使用不大的batch大小
y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input') #在第一个维度上利用None,可以方便使用不大的batch大小
#定义前向传播过程
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)))
learning_rate=0.001
train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)  #在此神经网络中只有基础学习率的设置,没有指数衰减率,也没有正则项和滑动平均模型。
#通过随机数生成一个模拟数据集
rdm=RandomState(1)
dataset_size=128
X=rdm.rand(dataset_size,2)
#以下定义真实的样本标签(利用如下规则:所有x1+x2<1的样例被认为正样本,即合格样本,用1表示;否则不合格样本,用0表示)
Y=[[int(x1+x2<1)] for (x1,x2) in X]
#以下创建一个session会话来运行TensorFlow程序
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)#每次选取batch_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("After%dtraining step(s),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.85811085]
 [-0.19662298]
 [ 0.13895045]]
After0training step(s),cross_entropy on all data is0.227861
After1000training step(s),cross_entropy on all data is0.0395041
After2000training step(s),cross_entropy on all data is0.0199546
After3000training step(s),cross_entropy on all data is0.0117527
After4000training step(s),cross_entropy on all data is0.00781693
[[-1.7101479  2.2005002  1.576958 ]
 [-3.6296377  1.1303781  2.4205081]]
[[-1.8791978 ]
 [ 0.62330467]
 [ 1.771285  ]]





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值