Tensorflow学习笔记:基础篇(1)——线性回归

Tensorflow学习笔记:基础篇(1)——线性回归


准备工作

— 正文开始之前,我先介绍一下我自己使用的Tensorflow环境,无论是Mac还是Windows,强烈推荐使用Anaconda,里面集成了大部分常用的程序包,不建议自己配 。
— 编译环境我选用PyCharm,官方有Community(免费版)和Professional(收费版)两种,各取所需~~
当然,检查几个必要的程序包是否安装:Pandas、Numpy、Matplotlib、tensorflow(仅限使用CPU版的TensorFlow)
简单说下,安装方法,
(1)Mac环境:终端内分别输入pip install pandas,numpy, matplotlib, tensorflow即可
(2)Windows10环境:建议打开Anaconda里有个Anaconda prompt,类似于终端,输入上行命令即可
这里写图片描述
这里写图片描述


重要概念

这里写图片描述

Graph & Session

(1)在上图Graph1一个个圆圈,称之为OP(算子),Graph的意义在于描绘整幅图(定义计算)
(2)在Session中执行Graph中的计算

计算定义 不等于 执行计算

计算流程

1、数据准备
2、准备好placeholder
3、初始化参数/权重
4、计算预测结果
5、计算损失值
6、初始化optimizer
7、指定迭代次数,并在session执行graph

代码示例

1、数据准备

这个数据是我们自己生成,在【-3,3】内生成100个点,使用正弦函数上加上了随机噪声

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

n_observations = 100
xs = np.linspace(-3, 3, n_observations)
ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_observations)
plt.scatter(xs, ys)
plt.show()

这里写图片描述

2、准备好placeholder

placeholder存放用于训练的数据,通过字典形式传入placeholder(之后会用到)

X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
3、初始化参数/权重

线性回归问题使用 y = wx + b进行拟合,此处构造两个变量 w 与 b,
tf.Variable 是一个类,初始化的对象可以有多个op,此处初始化为随机数

W = tf.Variable(tf.random_normal([1]), name='weight')
B = tf.Variable(tf.random_normal([1]), name='bias')
4、计算预测结果

y = wx + b

Y_pred = tf.add(tf.multiply(X, W), B)
5、计算损失值
loss = tf.square(Y - Y_pred, name='loss')
6、初始化optimizer

使用最常规的梯度下降函数,使得loss函数的值取到极小值

learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

以上过程,恭喜你已经完成了描绘整幅图,也就是定义了所有的计算,接下来,我们开始执行计算

7、指定迭代次数,并在session执行graph

init = tf.global_variables_initializer()
sess.run(init)
此处两句极其重要,需要先初始化变量,才能进行读取和写入(赋值)操作

执行计算——sess.run()

n_sample = xs.shape[0]
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    for i in range(50):
        total_loss = 0
        for x, y in zip(xs, ys):
            __, l = sess.run([optimizer, loss], feed_dict={X: x, Y: y})
            total_loss += l
        if i % 5 == 0:
            print('Epoch{0}:{1}'.format(i, total_loss/n_sample))

    W, B = sess.run([W, B])

plt.scatter(xs, ys)
plt.plot(xs, xs*W + B)
plt.show()
运行结果

迭代计算50次,可以发现loss值并没有继续降低,因为线性拟合并不适用于正弦函数,此处举这个例子只是为了帮助大家搭建起Tensorflow的框架,下一期的多项式回归,将在这个框架上进行修改,产生不一样的效果
这里写图片描述
这里写图片描述


完整代码

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt


#数据准备
n_observations = 100
xs = np.linspace(-3, 3, n_observations)
ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_observations)
#plt.scatter(xs, ys)
#plt.show()


#准备好placeholder
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')


#初始化参数/权重
W = tf.Variable(tf.random_normal([1]), name='weight')
B = tf.Variable(tf.random_normal([1]), name='bias')


#计算预测结果
Y_pred = tf.add(tf.multiply(X, W), B)

#计算损失值
loss = tf.square(Y - Y_pred, name='loss')

#初始化optimizer
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)


#指定迭代次数,并在session执行graph
n_sample = xs.shape[0]
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    for i in range(50):
        total_loss = 0
        for x, y in zip(xs, ys):
            __, l = sess.run([optimizer, loss], feed_dict={X: x, Y: y})
            total_loss += l
        if i % 5 == 0:
            print('Epoch{0}:{1}'.format(i, total_loss/n_sample))

    W, B = sess.run([W, B])

plt.scatter(xs, ys)
plt.plot(xs, xs*W + B)
plt.show()
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值