学习笔记 | 深度学习开发—TensorFlow实践(线性回归问题TensorFlow实战)

简介: 学习笔记 | 深度学习开发—TensorFlow实践(线性回归问题TensorFlow实战)

核心步骤

1.准备数据


2.构建数据


3.训练模型


4.进行预测


线性方程

单变量的线性方程可以表示为:


y=w*x+b


本例通过生成人工数据集。随机生成一个近似采样随机分布,使得


w=2.0, b=1, 并加入一个噪声,噪声的最大振幅为0.4


image.png



人工数据集生成

import tensorflow as tf#载入tensorflow
import numpy as np#载入numpy
import  matplotlib.pyplot as  plt#载入matplotlib
#设置随机数种子
np.random.seed(5)
#直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间
x_data=np.linspace(-1,1,100)
#y=2x+1+噪声。其中噪声维度与x_data一致
y_data=2*x_data+1.0+np.random(*x_data.shape)*0.4


利用matplotlib画出生成结果


##利用matplotlib画出生成结果
#画出随机生成数据的散点图
plt.scatter(x_data,y_data)
#画出我们想要学习到的线性函数y=2x+1
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)
plt.show()

image.png

构建模型

##构建模型
#定义训练数据的占位符,x是特征值,y是标签值
x=tf.placeholder("float",name="x")
y=tf.placeholder("float",name="y")
#定义模型函数
def model(x,w,b):
    return tf.multiply(x,w)+b


定义模型结构

创建变量


TensorFlow变量的声明函数是tf.Variable


tf.Variable的作用是保存和更新参数


变量的初始值可以是随机数、常数、或是通过其他变量的初始值计算得到


##定义模型结构
#创建变量
#构建线性函数的斜率,变量w
w=tf.Variable(1.0,name="w0")
#构建线性函数的截距,变量b
b=tf.Variable(0.0,name="b0")
#pred是预测值,前向计算
pre=model(x,w,b)

训练模型

设置训练参数


##训练模型
#迭代次数(训练轮数)
train_epochs=10
#学习率
learning_rate=0.5

定义损失函数

损失函数用于描述预测值与真实值之间的误差,从而指导模型收敛方向。常见损失函数:均方差(Mean Square Error, MSE)和交叉熵(cross-entropy)


L2 损失函数


##定义损失函数
#采用均方差作为损失函数
loss_function=tf.reduce_mean(tf.square(y-pred))

定义优化器

定义优化器Optimizer,初始化一个GradientDescentOptimizer


设置学习率和优化目标:最小化损失



##定义优化器
#梯度下降优化器
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

创建会话

##创建会话
sess=tf.Session()
#变量初始化
init=tf.global_variables_initializer()
sess.run(init)


迭代训练

模型训练阶段,设置迭代轮次,每次通过将样本逐个输入模型,进行梯度下降优化操作每轮迭代后,绘制出模型曲线


##迭代训练
#开始训练,轮数为epoch,采用SGD随机梯度下降优化方法
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
    b0temp=b.eval(session=sess)
    w0temp=w.eval(session=sess)
    #画图
    plt.plot(x_data,w0temp*x_data+b0temp)


迭代训练结果


image.png


image.png



从上图可以看出,本案例所拟合的模型较简单,训练3次之后已经接近收敛对于复杂模型,需要更多次训练才能收敛



结果查看


结果

当训练完成后,打印查看参数
print("w",sess.run(w))#w的值应该在2附近
print("b",sess.run(b))#b的值应该在1附近

w 2.1227033


b 1.046243



结果可视化


plt.scatter(x_data,y_data,label='Original data')
plt.plot(x_data,x_data*sess.run(w)+sess.run(b),\
lable='Fitted line',color='r',linewidth=3)
plt.legend(loc=2)#通过参数loc指定图例位置


image.png



利用模型 进行预测

#利用模型预测
x_test=3.21
predict=sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)
target=2*x_test+1.0
print("目标值:%f"%target)


预测值:7.860121


目标值:7.420000



小结

(1)生成人工数据集及其可视化

(2)构建线性模型

(3)定义损失函数

(4)定义优化器、最小化损失函数

(5)训练结果的可视化

(6)利用学习到的模型进行预测



显示损失值

##迭代训练
#开始训练,轮数为epoch,采用SGD随机梯度下降优化方法
step=0#记录训练次数
loss_list=[]#用于保存loss值的列表
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        #显示损失值loss
        #display_step:控制报告粒度
        #例如如果display_step设为2,则将每训练2个样本输出一次损失值
        #与超参数不同,修改display_step不会更改模型所学习的规律
        display_step=10
        loss_list.append(loss)
        step=step+1
        if step % display_step==0:
            print("Train Epoch:",'%02d' % (epoch+1),"Step:%03d" % (step),"loss=",\
                  "{:.9f}".format(loss))
    b0temp=b.eval(session=sess)
    w0temp=w.eval(session=sess)

Train Epoch: 01 Step:010 loss= 0.142807513


Train Epoch: 01 Step:020 loss= 2.077342749


Train Epoch: 01 Step:030 loss= 0.002882579


Train Epoch: 01 Step:040 loss= 0.515065134


Train Epoch: 01 Step:050 loss= 0.015309114


Train Epoch: 01 Step:060 loss= 0.027440201


Train Epoch: 01 Step:070 loss= 2.683870554


Train Epoch: 01 Step:080 loss= 0.020359127


Train Epoch: 01 Step:090 loss= 0.137483820


Train Epoch: 01 Step:100 loss= 0.000411486


Train Epoch: 02 Step:110 loss= 0.000086412


Train Epoch: 02 Step:120 loss= 2.024667263


Train Epoch: 02 Step:130 loss= 0.006071734


Train Epoch: 02 Step:140 loss= 0.474449933


Train Epoch: 02 Step:150 loss= 0.008577253


Train Epoch: 02 Step:160 loss= 0.038185447


Train Epoch: 02 Step:170 loss= 2.601174593


Train Epoch: 02 Step:180 loss= 0.015048586


Train Epoch: 02 Step:190 loss= 0.126568303


Train Epoch: 02 Step:200 loss= 0.000983429


Train Epoch: 03 Step:210 loss= 0.170813769


Train Epoch: 03 Step:220 loss= 2.023455858


Train Epoch: 03 Step:230 loss= 0.006033598


Train Epoch: 03 Step:240 loss= 0.474852115


Train Epoch: 03 Step:250 loss= 0.008635622


Train Epoch: 03 Step:260 loss= 0.038067851


Train Epoch: 03 Step:270 loss= 2.602004528


Train Epoch: 03 Step:280 loss= 0.015098289


Train Epoch: 03 Step:290 loss= 0.126676723


Train Epoch: 03 Step:300 loss= 0.000976413


Train Epoch: 04 Step:310 loss= 0.167299852


Train Epoch: 04 Step:320 loss= 2.023467541


Train Epoch: 04 Step:330 loss= 0.006033977


Train Epoch: 04 Step:340 loss= 0.474848181


Train Epoch: 04 Step:350 loss= 0.008635025


Train Epoch: 04 Step:360 loss= 0.038069107


Train Epoch: 04 Step:370 loss= 2.601995945


Train Epoch: 04 Step:380 loss= 0.015097762


Train Epoch: 04 Step:390 loss= 0.126675367


Train Epoch: 04 Step:400 loss= 0.000976473


Train Epoch: 05 Step:410 loss= 0.167335451


Train Epoch: 05 Step:420 loss= 2.023467302


Train Epoch: 05 Step:430 loss= 0.006033987


Train Epoch: 05 Step:440 loss= 0.474848181


Train Epoch: 05 Step:450 loss= 0.008635025


Train Epoch: 05 Step:460 loss= 0.038069062


Train Epoch: 05 Step:470 loss= 2.601996422


Train Epoch: 05 Step:480 loss= 0.015097790


Train Epoch: 05 Step:490 loss= 0.126675367


Train Epoch: 05 Step:500 loss= 0.000976473


Train Epoch: 06 Step:510 loss= 0.167335063


Train Epoch: 06 Step:520 loss= 2.023467541


Train Epoch: 06 Step:530 loss= 0.006033987


Train Epoch: 06 Step:540 loss= 0.474848181


Train Epoch: 06 Step:550 loss= 0.008635025


Train Epoch: 06 Step:560 loss= 0.038069062


Train Epoch: 06 Step:570 loss= 2.601996422


Train Epoch: 06 Step:580 loss= 0.015097790


Train Epoch: 06 Step:590 loss= 0.126675367


Train Epoch: 06 Step:600 loss= 0.000976473


Train Epoch: 07 Step:610 loss= 0.167335063


Train Epoch: 07 Step:620 loss= 2.023467541


Train Epoch: 07 Step:630 loss= 0.006033987


Train Epoch: 07 Step:640 loss= 0.474848181


Train Epoch: 07 Step:650 loss= 0.008635025


Train Epoch: 07 Step:660 loss= 0.038069062


Train Epoch: 07 Step:670 loss= 2.601996422


Train Epoch: 07 Step:680 loss= 0.015097790


Train Epoch: 07 Step:690 loss= 0.126675367


Train Epoch: 07 Step:700 loss= 0.000976473


Train Epoch: 08 Step:710 loss= 0.167335063


Train Epoch: 08 Step:720 loss= 2.023467541


Train Epoch: 08 Step:730 loss= 0.006033987


Train Epoch: 08 Step:740 loss= 0.474848181


Train Epoch: 08 Step:750 loss= 0.008635025


Train Epoch: 08 Step:760 loss= 0.038069062


Train Epoch: 08 Step:770 loss= 2.601996422


Train Epoch: 08 Step:780 loss= 0.015097790


Train Epoch: 08 Step:790 loss= 0.126675367


Train Epoch: 08 Step:800 loss= 0.000976473


Train Epoch: 09 Step:810 loss= 0.167335063


Train Epoch: 09 Step:820 loss= 2.023467541


Train Epoch: 09 Step:830 loss= 0.006033987


Train Epoch: 09 Step:840 loss= 0.474848181


Train Epoch: 09 Step:850 loss= 0.008635025


Train Epoch: 09 Step:860 loss= 0.038069062


Train Epoch: 09 Step:870 loss= 2.601996422


Train Epoch: 09 Step:880 loss= 0.015097790


Train Epoch: 09 Step:890 loss= 0.126675367


Train Epoch: 09 Step:900 loss= 0.000976473


Train Epoch: 10 Step:910 loss= 0.167335063


Train Epoch: 10 Step:920 loss= 2.023467541


Train Epoch: 10 Step:930 loss= 0.006033987


Train Epoch: 10 Step:940 loss= 0.474848181


Train Epoch: 10 Step:950 loss= 0.008635025


Train Epoch: 10 Step:960 loss= 0.038069062


Train Epoch: 10 Step:970 loss= 2.601996422


Train Epoch: 10 Step:980 loss= 0.015097790


Train Epoch: 10 Step:990 loss= 0.126675367


Train Epoch: 10 Step:1000 loss= 0.000976473



图形化显示损失值

plt.plot(loss_list)
plt.plot(loss_list,'r+')


image.png


image.png

随机梯度下降


在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数 假定批量是指整个数据集,数据集通常包含很大样本(数万甚至数千亿), 此外, 数据集通常包含多个特征。因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算


随机梯度下降法 (SGD) 每次迭代只使用一个样本(批量大小为 1),如果进行足够的迭代,SGD 也可以发挥作用。“随机”这一术语表示构成各个批量的一个样本都是随机选择的


小批量随机梯下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量SGD可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效


相关文章
|
24天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
117 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
17天前
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
31 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
27天前
|
机器学习/深度学习 人工智能 TensorFlow
TensorFlow 是一个由 Google 开发的开源深度学习框架
TensorFlow 是一个由 Google 开发的开源深度学习框架
24 3
|
14天前
|
机器学习/深度学习 人工智能 算法
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
服装识别系统,本系统作为图像识别方面的一个典型应用,使用Python作为主要编程语言,并通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对18种不同的服装('黑色连衣裙', '黑色衬衫', '黑色鞋子', '黑色短裤', '蓝色连衣裙', '蓝色衬衫', '蓝色鞋子', '蓝色短裤', '棕色鞋子', '棕色短裤', '绿色衬衫', '绿色鞋子', '绿色短裤', '红色连衣裙', '红色鞋子', '白色连衣裙', '白色鞋子', '白色短裤')数据集进行训练,最后得到一个识别精度较高的H5格式模型文件,然后基于Django搭建Web网页端可视化操作界面,实现用户在界面中
36 1
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
|
24天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
171 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
2天前
|
机器学习/深度学习 数据采集 人工智能
探索深度学习的奥秘:从理论到实践
本文旨在为读者提供一个深入浅出的旅程,探索深度学习技术的核心概念、应用实例以及未来发展趋势。通过分析深度学习的理论基础和实际案例,本文揭示了如何将这一前沿技术应用于解决现实世界问题。
|
25天前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
115 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘深度学习:从理论到实践的技术之旅
【7月更文挑战第10天】本文将深入探索深度学习的奥秘,从其理论基础讲起,穿越关键技术和算法的发展,直至应用案例的实现。我们将一窥深度学习如何变革数据处理、图像识别、自然语言处理等领域,并讨论当前面临的挑战与未来发展趋势。
|
10天前
|
机器学习/深度学习 搜索推荐 算法
深度学习在推荐系统中的应用:技术解析与实践
【7月更文挑战第6天】深度学习在推荐系统中的应用为推荐算法的发展带来了新的机遇和挑战。通过深入理解深度学习的技术原理和应用场景,并结合具体的实践案例,我们可以更好地构建高效、准确的推荐系统,为用户提供更加个性化的推荐服务。
|
14天前
|
机器学习/深度学习 PyTorch TensorFlow
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同
PAI DLC与其他深度学习框架如TensorFlow或PyTorch的异同