Tensorflow使用例子(一)

开发基本步骤:

  1. 定义输入节点
  2. 定义学习参数的变量
  3. 定义运算
  4. 优化函数,优化目标
  5. 初始化所有变量
  6. 迭代更新参数到最优解
  7. 测试模型
  8. 使用模型
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 制造数据
train_X = np.linspace(-1,1,100)
train_Y = 2*train_X+np.random.randn(*train_X.shape)*0.3
# y =2x+b

#常见的无衬线字体有 Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。
plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


#创建模型
X = tf.placeholder("float")
Y = tf.placeholder("float")
W = tf.Variable(tf.random_normal([1]),name="weight")
b = tf.Variable(tf.zeros([1]),name='bias')

z = tf.multiply(X,W)+b

cost = tf.reduce_mean(tf.square(Y-z)) #损失函数
learning_rate = 0.01 #学习率,越小精度越高,速度越慢
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #梯度下降算法

# 训练模型
init = tf.global_variables_initializer()
train_epochs = 20
display_step =2  #展示模型参数
def moving_average(a,w=10):
    if len(a)<w:
        return a[:]
    return [val if i<w else sum(a[(i-w):i])/w for i,val in enumerate(a)]
with tf.Session() as sess:
    sess.run(init)
    pltdata = {'batchsize':[],"loss":[]}#存放批次值和损失值
    # 向模型填充数据
    for epoch in range(train_epochs):
        for (x,y) in zip(train_X,train_Y):
            sess.run(optimizer,feed_dict={X:x,Y:y})
            if epoch % display_step ==0:
                loss = sess.run(cost,feed_dict={X:train_X,Y:train_Y})
                print("Epoch",epoch+1,"cost",loss,"W=",sess.run(W),"b=",sess.run(b))
                if not (loss =='NA'):
                    pltdata['batchsize'].append(epoch)
                    pltdata['loss'].append(loss)

    print('完成了。')
    print('cost=',sess.run(cost,feed_dict={X:train_X,Y:train_Y}),'W=',sess.run(W),'b=',sess.run(b))
    plt.plot(train_X, train_Y, 'ro', label='原始数据')
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='fiitedline')
    plt.legend()
    plt.show()
    pltdata["avgloss"] = moving_average(pltdata["loss"])
    plt.figure(1)
    plt.subplot(211)
    plt.plot(pltdata['batchsize'], pltdata['avgloss'], 'b--')
    plt.xlabel("minibatch number")
    plt.ylabel("Loss")
    plt.title('minibatch run vs.training loss')
    plt.show()
    #使用模型预测
    print(sess.run(z,feed_dict={X:0.2}))

在这里插入图片描述
随着不断训练,损失值越来越低,最后趋于平稳。
在这里插入图片描述损失函数用于计算输出值与目标值之间的误差,用于反向传播是计算梯度使用,损失函数必须是可导的。损失函数使用tensorflow的就可以。

优化函数也是使用tensorflow有的几种就可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值