tensorflow-1. Tensorflow入门

Tensorflow入门

深度学习,我的通俗理解就是:系统根据用户提供的大量数据,慢慢推算出条件和结果之间的关系,这个过程叫“训练”,当训练完善后,这个系统就可以根据用户给的条件,从而推算出结果了,这就是“预测”。

这里以酸奶的浓稠度和含糖量对酸奶销量的影响为案例。设酸奶的销量为y,浓稠度为x1,含糖量为x2。我们假设他们有以下关系:

y = 3 x 1 + 4 x 2 y = 3x_1+4x_2 y=3x1+4x2

当然事先我们是不知道这个关系的,这个关系是系统根据我们给的大量数据推算出来的,推算出来后,系统就可以根据我们给的 x 1 x_1 x1 x 2 x_2 x2,从而预测出销量 y y y了。
这里,我们称 x 1 x_1 x1 x 2 x_2 x2为特征数据, y y y为目标数据

1. 引入tensorflow模块

1.1. 安装

pip install tensorflow

1.2. 导入

import tensorflow as tf    # tensorflow库
import numpy as np         # 科学计算库

2. 准备数据集

由于这里没有数据集,我就随机产生一些数据,模拟这个案例:

# 产生随机的32行两列的数组,模拟案例中的x1和x2
X = np.random.rand(32, 2)    
# 人为计算销售量,并加上一些随机上下浮动0.05,更好模拟真实情况。Y_是一个32行1列的数组
Y_ = [[(x1 + x2 + np.random.rand() / 10 - 0.05)] for (x1, x2) in X]    

3. 前向传播

前向传播指的就是定义系统的一个大概模型,指出数据的计算过程。

这里的参数w1其实就是我们案例中 x 1 x_1 x1 x 2 x_2 x2的系数,我们就是要让系统自己学习找到这个系数,由于我们事先不清楚正确的参数,我们就设置两个随机值好了。

# 设置占位变量x,是一个多行2列的矩阵,tf.float32类型,用来表示我们要输入给系统的特征数据
x = tf.placeholder(tf.float32, shape=(None, 2))
# 设置占位变量y,是一个多行1列的矩阵,tf.float32类型,用来表示我们要输入给系统的目标数据
y_ = tf.placeholder(tf.float32, shape=(None, 1))
# 设置参数w1,是一个随机的2行1列的矩阵,通过后面不断训练来慢慢精确这个参数
w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))
# 设置计算过程,这里设置y=x*w1,注意这里是矩阵相乘,y就是预测的目标值
y = tf.matmul(x, w1)

4. 后向传播

后向传播就是输入数据,优化w1的训练过程了。

正式训练前,还需要给系统一个训练目标和训练方法。

# 定义loss,这里采用均方误差函数。loss大体都是表示真实值与预测值的差距,也就是训练目标,loss越小越好
loss = tf.reduce_mean(tf.square(y - y_))
# 定义训练方法,这里采用梯度下降方法,学习率0.001,目标是最小化loss
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

定义好了之后,我们就可以开始正式训练了。

with tf.Session() as sess:
    # 初始化所有参数,也就是w1
    sess.run(tf.global_variables_initializer())
    # 训练训练3000轮
    for i in range(3000):
        # 这里对32取余是因为一共只有32组数据,为了循环反复训练,8表示一轮训练8组数据
        start = (i * 8) % 32
        end = start + 8
        # 开始训练,传入训练方法,特征值,目标值
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]})
        # 每500次,打印一下loss值下降到多少了
        if i % 500 == 0:
            total_loss = sess.run(loss_mse, feed_dict={x: X, y_: Y_})
            print("After %d training step(s), loss on all data is %g" % (i, total_loss))

5. 预测

训练完成之后,我们就可以拿着我们的模型去预测啦,现在我们看看我们的模型预测的准不准确。

# result就是系统根据x预测出的y值
result = sess.run(y, feed_dict={x: X})
# 并排打印出预测的result 和 真是值Y_,看看正确率如何
print("result,result_:\n", np.hstack((result, Y_)))

我这预测的还是相差不大的,哈哈?

[[0.72301422 0.71865559]
 [1.27136859 1.2960012 ]
 [0.74490749 0.7199052 ]
 [0.74679013 0.76019734]
 [0.78995933 0.81218135]
 [1.65195199 1.597808  ]
 [1.24874102 1.28705704]
 [1.36946537 1.39100718]
 [0.22747003 0.22981407]
 [0.85180104 0.84842145]
 [1.09721163 1.05556405]
 [1.73587869 1.72872591]
 [0.73553694 0.73203117]
 [1.45073273 1.45101547]
 [1.44788887 1.46239066]
 [0.10793123 0.1587979 ]
 [1.10899451 1.14675248]
 [1.35090976 1.37091422]
 [0.80118365 0.84230471]
 [1.70304778 1.66415489]
 [1.48338411 1.47217536]
 [1.52690139 1.54503202]
 [1.22733201 1.19195855]
 [0.96426405 0.96259636]
 [0.68815553 0.72996151]
 [1.22227358 1.25809622]
 [1.39231608 1.34931302]
 [0.97089912 0.94200033]
 [0.93892394 0.93816322]
 [1.80368738 1.83667779]
 [0.73639447 0.74155629]
 [1.1033923  1.11230731]]

最后附上完整代码:点击GitHub,可以关注一下哦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值