Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习入门实战(二):用TensorFlow训练线性回归

深度学习入门实战(二):用TensorFlow训练线性回归

原创
作者头像
serena
修改于 2021-08-03 06:56:03
修改于 2021-08-03 06:56:03
8K20
代码可运行
举报
文章被收录于专栏:社区的朋友们社区的朋友们
运行总次数:0
代码可运行

作者:董超

上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理解某个方法的含义,所以今天我们就介绍一下 TensorFlow,这个由谷歌爸爸出品的深度学习框架,文档比较全~以后的我们也都使用这个框架~

0x00 概要

TensorFlow是谷歌爸爸出的一个开源机器学习框架,目前已被广泛应用,谷歌爸爸出品即使性能不是最强的(其实性能也不错),但绝对是用起来最方便的,毕竟谷歌有Jeff Dean坐镇,这波稳。

0x01 TensorFlow安装

官方有一个Mac上TensorFlow的安装指南,点这里 我们现在就照着这个安装指南操作一把,官方推荐在virtualenv中安装TF,我们就在virtualenv安装吧,大家也可以直接安装。前几天TF发布1.0版了,我们就安装1.0版吧~

1.先安装下pip和six

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo easy_install --upgrade pip
$ sudo easy_install --upgrade six

2.安装下virtualenv

$ sudo pip install --upgrade virtualenv

3.接下来, 建立一个全新的 virtualenv 环境。这里将环境建在 ~/tensorflow目录下, 执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ virtualenv --system-site-packages ~/tensorflow
$ cd ~/tensorflow

4.然后, 激活 virtualenv:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ source bin/activate  # 如果使用 bash
$ source bin/activate.csh  # 如果使用 csh

(tensorflow)$ # 终端提示符应该发生变化 如果要退出虚拟环境可以执行

(tensorflow)$ deactivate

也可以直接在shell里执行下面的代码激活

source ~/tensorflow/bin/activate

5.在 virtualenv 内, 安装 TensorFlow: 因为我用的是Python 2.x所以执行

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0-py2-none-any.whl

要是使用Python3可以执行

$ pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0-py3-none-any.whl

当然也可以执行下面这个命令直接安装最新版

pip install --upgrade tensorflow

等命令执行完TF就安装好了

安装完成后可以在python中执行以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

如果输出

Hello, TensorFlow!

就说明安装成功啦

PS:运行脚本的时候会提示不支持SSE xxx指令集的提示,这是因为我们是通过pip直接安装的编译好的版本导致的,如果想针对机器优化,可以直接从GitHub上的源代码编译安装。但这样会复杂些,而且我觉得其实提升不大,用CPU都很慢。。。不如直接上GPU性能提升快。

PS2:如果想安装GPU版会复杂些,首先要有一块支持CUDA的N卡,再安装CUDA驱动啥的,各位看官可以谷歌一下查询相关资料。如果不想搜索,也可以看本系列后续文章,以后也会介绍如何在Mac下安装GPU版。

0x02 TensorFlow基本使用

在介绍样例之前,我们先介绍一下TensorFlow的一些基本概念

1.placehoder(占位符)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf.placeholder(dtype, shape=None, name=None)
Args:
    dtype: The type of elements in the tensor to be fed.
    shape: The shape of the tensor to be fed (optional). If the shape is not specified, you can feed a tensor of any shape.
    name: A name for the operation (optional).

dytpe:占位符的数据类型 shape:占位符的纬度,例如[2,2]代表2x2的二维矩阵,None可以代表任意维度,例如[None,2]则代表任意行数,2列的二维矩阵 name:占位符的名字

变量在定义时要初始化,但可能有些变量我们一开始定义的时候并不一定知道该变量的值,只有当真正开始运行程序的时候才由外部输入,比如我们需要训练的数据,所以就用占位符来占个位置,告诉TensorFlow,等到真正运行的时候再通过输入数据赋值。 例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = tf.placeholder(tf.float32, [2, 2])

就是生成了一个2x2的二维矩阵,矩阵中每个元素的类型都是tf.float32(也就是浮点型)。

有时候定义需要训练的参数时候,会定义一个[input_size,output_size]大小的矩阵,其中input_size数输入数据的维度,output_size是输出数据的维度

2.Variable(变量)

官方说明 有些长,我就不引用啦,这里介绍一个简单的用法,有一点变量在声明的时候要有一个初始值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = tf.Variable(tf.zeros([2,2])) # 声明一个2x2的矩阵,并将矩阵中的所有元素的值赋为0,默认每个元素都是tf.float32类型的数据
y = tf.Variable(1.0, tf.float32) # 声明一个tf.float32的变量,并将初始值设为1.0

我们一般还需要运行下global_variables_initializer真正在TensorFlow的Session中初始化所有变量,后面的样例中也会有体现。

3.Constant(常量)

官方说明 同样不引用啦,这里介绍一个简单的用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = tf.constant(3.0, tf.float32) # 定义一个值为3.0的浮点型常量

4.Session(会话)

TensorFlow所有的操作都必须在Session中运行,才能真正起作用,可以将Session当作TensorFlow运行的环境,Session运行完需要close~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#用close()关闭
sess = tf.Session()
sess.run(...)
sess.close()

#使用with..as..语句关闭
with tf.Session() as sess:
    sess.run(...)

5.简单使用

我们介绍下3+5应该如何在TensorFlow中实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf

x = tf.Variable(3, tf.int16) // 声明一个整型变量3
y = tf.Variable(5, tf.int16) // 声明一个整型变量5
z = tf.add(x,y) // z = x + y
init = tf.global_variables_initializer() // 初始化变量的操作
with tf.Session() as sess:
    sess.run(init)  // 在Session中初始化变量
    print(sess.run(z)) // 输出计算出的z值

0x03 样例

Github上有一个比较好的Demo合集,有注释有源代码还蛮好的,但今天我们不讲上面的代码,我们讲如何用TF实现线性回归模型。

所谓线性回归模型就是y = W * x + b的形式的表达式拟合的模型。

我们如果想通过深度学习拟合一条直线 y = 3 * x 应该怎么做呢?咱不讲虚的先展示下代码!然后我们在逐步分析。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
import tensorflow as tf

x = tf.placeholder(tf.float32)
W = tf.Variable(tf.zeros([1]))
b = tf.Variable(tf.zeros([1]))
y_ = tf.placeholder(tf.float32)

y = W * x + b

lost = tf.reduce_mean(tf.square(y_-y))
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
train_step = optimizer.minimize(lost)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

steps = 1000
for i in range(steps):
    xs = [i]
    ys = [3 * i]
    feed = { x: xs, y_: ys }
    sess.run(train_step, feed_dict=feed)
    if i % 100 == 0 :
        print("After %d iteration:" % i)
        print("W: %f" % sess.run(W))
        print("b: %f" % sess.run(b))
        print("lost: %f" % sess.run(lost, feed_dict=feed))

1.先导入需要使用的python库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
import tensorflow as tf

毕竟是基于TensorFlow的,那我们肯定要导入TensorFlow滴,导入之后取个别名tf,之后用起来方便些。

2.定义需要的变量,我们看看y = W * x + b中都有哪些变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = tf.placeholder(tf.float32)
W = tf.Variable(tf.zeros([1]))
b = tf.Variable(tf.zeros([1]))
y_ = tf.placeholder(tf.float32)

x:我们训练时需要输入的真实数据x W: 我们需要训练的W,这里我们定义了一个1维的变量(其实吧,就是一个普普通通的数,直接用tf.float32也行)并将其初值赋为0 b : 我们需要训练的b,定义一个1维变量,并将其初值赋为0 y_ :我们训练时需要输入的x对应的y

3.定义线性模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = W * x + b

4.定义损失函数和优化方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lost = tf.reduce_mean(tf.square(y_-y))
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
train_step = optimizer.minimize(lost)

lost = tf.reducemean(tf.square(y- y))

损失函数(Lost Function)是用来评估我们预测的值和真实的值之间的差距是多少,损失函数有很多种写法,我们这里使用(y预测-y真实)^2再取平均数来作为我们的损失函数(用这个函数是有原因的,因为我们用的是梯度下降法进行学习)损失函数的值越小越好,有些教程也叫Cost Function

optimizer = tf.train.GradientDescentOptimizer(0.0000001)

优化函数代表我们要通过什么方式去优化我们需要学习的值,这个例子里指的是W和b,优化函数的种类有很多,大家到官网查阅,平时我们用的比较多的是GradientDescentOptimizer和AdamOptimizer等,这里我们选用最常用也是最最基本的GradientDescentOptimizer(梯度下降),后面传入的值是学习效率。一般是一个小于1的数。越小收敛越慢,但并不是越大收敛越快哈,取值太大甚至可能不收敛了。。。

我们简单介绍下什么是梯度下降,梯度顾名思义就是函数某一点的导数,也就是该点的变化率。梯度下降则顾名思义就是沿梯度下降的方向求解极小值。

详细解释大家可以自行谷歌一下~当然可以可以看这篇文章,当然由于性能的原因梯度下降有很多种变种,例如随机梯度下降 (Stochastic Gradient Descent),小批梯度下降 (Mini-Batch Gradient Descent)。本文样例采用的是SGD,每次只输入一个数据。

train_step = optimizer.minimize(lost)

这个代表我们每次训练迭代的目的,本例我们的目的就是尽量减小lost的值,也就是让损失函数的值尽量变小

5.变量初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

这个之前有所介绍了,我们需要在Session中真正运行下global_variables_initializer才会真正初始化变量。

6.开始训练

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
steps = 1000
for i in range(steps):
    xs = [i]
    ys = [3 * i]
    feed = { x: xs, y_: ys }
    sess.run(train_step, feed_dict=feed)
    if i % 100 == 0 :
        print("After %d iteration:" % i)
        print("W: %f" % sess.run(W))
        print("b: %f" % sess.run(b))
        print("lost: %f" % sess.run(lost, feed_dict=feed))

我们定义一个训练迭代次数1000次。

这里我们图方便,每次迭代都直接将i作为x,3*i作为y直接当成训练数据。

我们所有通过placeholder定义的值,在训练时我们都需要通过feed_dict来传入数据。

然后我们每隔100次迭代,输出一次训练结果,看看效果如何~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
After 0 iteration:
W: 0.000000
b: 0.000000
lost: 0.000000
After 100 iteration:
W: 0.196407
b: 0.002951
lost: 78599.671875
After 200 iteration:
W: 1.249361
b: 0.009867
lost: 122582.625000
After 300 iteration:
W: 2.513344
b: 0.015055
lost: 21310.636719
After 400 iteration:
W: 2.960238
b: 0.016392
lost: 252.449890
After 500 iteration:
W: 2.999347
b: 0.016484
lost: 0.096061
After 600 iteration:
W: 2.999971
b: 0.016485
lost: 0.000001
After 700 iteration:
W: 2.999975
b: 0.016485
lost: 0.000001
After 800 iteration:
W: 2.999978
b: 0.016485
lost: 0.000001
After 900 iteration:
W: 2.999981
b: 0.016485
lost: 0.000000

可以看到在迭代了500次之后效果就很好了,w已经达到2.999347很接近3了,b也达到了0.016484也比较接近0了,因为这里学习率选择的比较小,所以收敛的比较慢,各位也可以尝试调大学习率,看看收敛的速度有何变化。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
mark
mark
回复回复点赞举报
良心博主
良心博主
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
TensorFlow神经网络实现股票预测
神经网络(NeuralNetworks)是一种用训练数据拟合目标函数的黑箱模型,只要数据量足够大,它可以拟合出输入到输出之间的任意函数关系。
不脱发的程序猿
2021/01/20
9450
一文学会用 Tensorflow 搭建神经网络
---- cs224d-Day 6: 快速入门 Tensorflow 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂,入门首选, 而且在github有代码, 想看视频的也可以去他的优酷里的频道找。 Tensorflow 官网 ---- 神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。 神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也
杨熹
2018/04/02
1.1K0
一文学会用 Tensorflow 搭建神经网络
使用TensorFlow实现手写识别(Softmax)
准备工作 由于将TensorFlow安装到了Conda的tensorflow环境,虽然可以用Jupyter notebook打开,但是没有提示,写代码不方便,所以使用PyCharm进行编写。设置如下: 如果是新建项目,在选择使用python的地址的地方,找到anaconda目录,点击envs ----> tensorflow -----> bin -----> python2.7(我的是2.7) 如果已经创建了项目,但是没有用该环境下的python,就进入项目的设置里,找到project interpret
用户1332428
2018/03/08
9790
使用TensorFlow实现手写识别(Softmax)
TensorFlow可视化工具-TensorBoard上手
TensorBoard是TensorFlow自带的神经网络可视化工具,用直观的流程图显示神经网络,更好的理解学习。
百川AI
2021/10/19
7720
Tensorflow快速入门
作者:叶 虎 编辑:李文臣 PART 01 Tensorflow简介 引言 实践深度学习肯定要至少学习并掌握一个深度学习框架。这里我们介绍一个最流行的深度学习框架:Tensorflow。Tensorf
机器学习算法工程师
2018/03/06
1.1K0
Tensorflow快速入门
【TensorFlow】TensorFlow的线性回归
该文章讲述了作者在使用TensorFlow时遇到的一个训练速度慢、难以收敛的问题,并分析了出现问题的可能原因。作者通过更改学习率、优化算法等调整,最终成功解决了该问题。
Alan Lee
2018/01/02
1.5K0
【TensorFlow】TensorFlow的线性回归
tensorflow之线性回归
定义输入变量x,输出变量y;初始化线性回归中的参数:w,b;根据公式给出预测结果,计算误差,使用梯度下降优化;不断的训练,直到达到最大的训练次数(或考虑达到最小的误差要求),结束训练,输出最终的结果;
用户7886150
2021/01/09
5720
深度学习入门实战(三):图片分类中的逻辑回归
文章主要介绍了如何使用TensorFlow进行深度学习,包括神经网络模型的定义、模型的搭建、训练、预测等步骤。同时,文章还介绍了如何使用TensorFlow进行图像分类和文本情感分析等具体应用。
serena
2017/04/19
8.1K1
深度学习入门实战(三):图片分类中的逻辑回归
02 The TensorFlow Way(3)
该文对神经网络在计算机视觉领域的应用进行了分析,并介绍了如何使用Keras框架进行训练和部署。文章还讨论了神经网络在计算机视觉任务中的常见应用,包括图像分类、目标检测和图像分割等。
MachineLP
2018/01/09
8240
Python Tensorflow神经网络实现股票预测
神经网络(NN)它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。在提供数据量足够大情况下,神经网络可以拟合出输入到输出之间的任意函数关系。
用户9925864
2022/07/27
1.1K0
Python Tensorflow神经网络实现股票预测
tensorflow的基本用法——使用MNIST训练神经网络
本文主要是使用tensorflow和mnist数据集来训练神经网络。 #!/usr/bin/env python # _*_ coding: utf-8 _*_ import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 下载mnist数据 mnist = input_data.read_data_sets('MNIST_data', one_hot=True) # 定义神经网络模型的评估
Tyan
2019/05/25
6620
TensorFlow从0到1 - 5 - TensorFlow轻松搞定线性回归
上一篇 第一个机器学习问题 其实是一个线性回归问题(Linear Regression),呈现了用数据来训练模型的具体方式。本篇从平行世界返回,利用TensorFlow,重新解决一遍该问题。 TensorFlow的API有低级和高级之分。 底层的API基于TensorFlow内核,它主要用于研究或需要对模型进行完全控制的场合。如果你想使用TF来辅助实现某个特定算法、呈现和控制算法的每个细节,那么就该使用低级的API。 高级API基于TensorFlow内核构建,屏蔽了繁杂的细节,适合大多数场景下使用。如果
袁承兴
2018/04/11
1.1K0
TensorFlow从0到1 - 5 - TensorFlow轻松搞定线性回归
tensorflow的基本用法——创建神经网络并训练
本文主要是介绍利用tensorflow创建一个简单的神经网络并进行训练。 #!/usr/bin/env python # _*_ coding: utf-8 _*_ import tensorflow as tf import numpy as np # 创建一个神经网络层 def add_layer(input, in_size, out_size, activation_function = None): """ :param input: 神经网络层的输入
Tyan
2019/05/25
5910
TensorFlow学习
TensorFlow学习0.导语1.Session会话控制(两种打开模式)2.Tensorflow使用Variable3.Placeholder 传入值4.激励函数(activate function)5.定义添加神经层的函数6.建造神经网络7.matplotlib 可视化8.学习文章
公众号guangcity
2019/09/20
6410
TensorFlow学习
TensorFlow Tutorial-1
1、Why TensorFlow? 网上有关介绍太多了,我就不多说了,这里主要注重使用。 Intro.PNG github.PNG 2、Programing model 2.1.Big Idea 将数
用户1332428
2018/03/08
7810
TensorFlow Tutorial-1
TensorFlow编程入门(一)
本文介绍如何使用TensorFlow搭建神经网络。首先介绍了TensorFlow的基础概念和主要组件,然后通过一个简单的线性回归例子展示了如何利用TensorFlow搭建神经网络。接着介绍了如何使用TensorFlow搭建卷积神经网络,并通过一个手写数字识别的例子进行了演示。最后介绍了如何使用TensorFlow搭建循环神经网络,并通过一个语音识别的例子进行了演示。
用户1148523
2018/01/09
6080
tensorflow学习笔记_01
最近看到一个有趣的项目pix2pix-tensorflow。大概功能是用户在网页上画一只猫的轮廓,然后它就可以输出与这个轮廓很相似的猫的清晰图片。出于好奇,就想研究一下这个项目是如何实现的,于是跳入了tensorflow机器学习这个坑。 tensorflow是什么 TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。Tenso
jeremyxu
2018/05/10
7150
TensorFlow入门1-minist
模型公式 y = softmax(Wx+b) 交叉熵loss函数,可以参考似然函数,y 是我们预测的概率分布, y' 是实际的分布(我们输入的one-hot vector) loss = -Σy'ilogyi import tensorflow.examples.tutorials.mnist.input_data from tensorflow.contrib.learn.python.learn.datasets.mnist import re
用户1733462
2018/06/07
7380
深度学习入门实战
导语:在本文的开始前,强烈推荐两个深度学习相关的视频集 1.中国台湾李宏毅教授的ML 2016,清晰明了,很多晦涩的原理能让你看了也能明白:https://www.youtube.com/watc
IT派
2018/03/29
8270
深度学习入门实战
深度学习(3)——用tensorflow实现机器学习算法1实现线性回归实现逻辑回归
前言:主要用TensorFlow实现线性回归和逻辑回归这两个机器学习算法,就当对TensorFlow的一个应用了吧 1实现线性回归 直接上代码吧,注释和步骤直接在代码里面了 # 1. 构造一个数据 np.random.seed(28) N = 100 x = np.linspace(0, 6, N) + np.random.normal(loc=0.0, scale=2, size=N) y = 14 * x - 7 + np.random.normal(loc=0.0, scale=5.0, size=N
DC童生
2018/07/04
6150
相关推荐
TensorFlow神经网络实现股票预测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验