tensorflow 学习 demo(-)

#!/usr/bin/env  python

import tensorflow as tf

#numpy 是一个科学计算工具包,这里通过numpy工具包生成模拟数据集
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。
# 但是在测试的时候,可以一次性使用全部的数据。当数据集比较小时比较放便测试,但是数据集比较时
#将大量数据放入一个batch可能导致内存溢出
x=tf.placeholder(tf.float32,shape=(None,2),name='x-input')
y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input')


#定义神经网络前向传播过程

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)

#通过随机数生成模拟数据,种子是1
rdm=RandomState(1)
dataset_size = 128

#生成128行2列的矩阵
X=rdm.rand(dataset_size,2)

#print(X)

#定义规则来给出样本的标签,在这里所有x1+x2<1 的样例都被认为是正样本(比如零件的合格),而其他为负样本(比如零件不合格)
#和tensorflow游乐场中表示法不一样的地方是,在这里使用0表示负样本,1表示正样本,大部分解决分类问题的神经网络都会采用0和1
#的表示方法
Y=[[int(x1+x2<1)] for (x1,x2) in X]

#创建一个回话来运行tensorflow,利用python with 防止资源泄露和浪费
with tf.Session() as sess:
    init_op=tf.initialize_all_variables()
    sess.run(init_op)
    print('训练前 W1:\n',sess.run(w1))
    print('训练前 W2:\n',sess.run(w2))
    '''
    在训练之前神经网络参数的值:
    [[-0.81131822  1.48459876  0.06532937]
     [-2.4427042   0.0992484   0.59122431]]

   [[-0.81131822]
    [ 1.48459876]
    [ 0.06532937]]  
    '''
    STEPS=5000
    for i in range(STEPS):
        #每次选取batch个样例进行训练
        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_entroy=sess.run(
                cross_entropy,feed_dict={x:X,y_:Y}
            )
            print("After %d training step(s),cross entropy on all data is %g" %(i,total_cross_entroy))
            '''
           输出结果:
            After 0 training step(s),cross entropy on all data is 0.0674925
            After 1000 training step(s),cross entropy on all data is 0.0163385
            After 2000 training step(s),cross entropy on all data is 0.00907547
            After 3000 training step(s),cross entropy on all data is 0.00714436
            After 4000 training step(s),cross entropy on all data is 0.00578471
           通过结果发现随着训练进行,交叉商在逐渐变小,
           说明预测的结果和真实结果的差距越小
           '''
    print('训练后 W1:\n',sess.run(w1))
    print('训练后 W2:\n',sess.run(w2))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值