商城网站开发培训学校,安徽建设工程信息网上查询,营销公司,好人有好报政安晨的个人主页#xff1a;政安晨 欢迎 #x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益#xff0c;如有不足之处#xff0c;欢迎在评论区提出指正#xff01; 这篇文章中#xff0c;咱们将使用Keras和TensorFlow… 政安晨的个人主页政安晨 欢迎 点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益如有不足之处欢迎在评论区提出指正 这篇文章中咱们将使用Keras和TensorFlow训练一个神经网络如果您是第一次看到这篇文章那就是训练您的第一个神经网络。
前言
随机梯度下降Stochastic Gradient Descent简称SGD是深度学习中最常用的优化算法之一。它是一种迭代的优化算法用于求解目标函数的最小值。
在深度学习中目标是通过不断调整模型的参数来最小化损失函数。 SGD的基本思想是每次迭代时随机选择一小批训练样本称为一个mini-batch计算这个mini-batch的梯度并用梯度的负方向更新模型的参数。这样反复进行迭代直到达到停止条件为止。 与传统的梯度下降算法不同SGD每次迭代只利用一个mini-batch来估计梯度因此计算速度更快。此外在数据比较多的情况下SGD还具有一定的随机性能够逃离局部最小值从而更有可能达到全局最小值。 然而SGD也存在一些问题。由于每次迭代只使用一个mini-batch因此梯度估计可能不够准确导致更新方向不够理想收敛速度较慢。为了解决这个问题可以使用一些改进的SGD算法如批量梯度下降Batch Gradient Descent、动量法Momentum、Adam等。
总的来说SGD是深度学习中非常重要的优化算法能够高效地训练深度神经网络模型。它的简单性和可扩展性使其成为了深度学习中的核心算法之一。 在这个系列的前两篇文章中我们学习了如何通过堆叠稠密层来构建全连接网络。当网络首次创建时所有的权重都是随机设置的 - 网络还不知道任何东西。
在本文中我们将看到如何训练神经网络我们将看到神经网络如何学习。
与所有机器学习任务一样我们首先需要一组训练数据。训练数据中的每个示例由一些特征输入和一个期望的目标结果输出组成。训练网络意味着调整其权重使其能够将特征转化为目标结果。 例如在80种麦片数据集中我们希望有一个网络可以获取每种麦片的“糖分”、“纤维”和“蛋白质”含量并预测该麦片的“卡路里”含量。如果我们成功地训练了一个网络来做到这一点那么它的权重必须以某种方式表示这些特征与目标结果之间的关系如训练数据所示。 除了训练数据我们还需要两个东西
一个“损失函数”用于衡量网络的预测效果。 一个“优化器”用于告诉网络如何调整权重。
损失函数
我们已经了解了如何为网络设计架构但我们还没有看到如何告诉网络解决什么问题。
这就是损失函数的工作。
损失函数衡量的是目标的真实值与模型预测值之间的差异。
不同的问题需要不同的损失函数。 我们一直在研究回归问题其中的任务是预测一些数值--比如80种谷物中的卡路里红酒质量评分。其他回归任务可能包括预测房屋价格或汽车燃油效率。 回归问题常用的损失函数是平均绝对误差MAE。对于每个预测值y_predMAE通过计算真实目标值y_true与预测值之间的绝对差abs(y_true - y_pred)来衡量它们之间的差异。
在数据集上的总MAE损失是所有这些绝对差异的均值。 平均绝对误差是拟合曲线与数据点之间的平均距离 除了MAE之外你可能在回归问题中看到其他的损失函数如均方误差MSE或Huber损失在Keras中都可用。 在训练过程中模型将使用损失函数作为指导找到其权重的正确值较低的损失更好。换句话说损失函数告诉网络它的目标。 优化器 - 随机梯度下降
我们已经描述了我们希望网络解决的问题但现在我们需要说明如何解决这个问题。
这是优化器的工作优化器是一种调整权重以最小化损失的算法。
几乎所有用于深度学习的优化算法都属于一种称为随机梯度下降SGD的算法家族。它们是迭代算法在训练网络时分步进行。
训练的一个步骤如下所示 1. 抽样一些训练数据并通过网络进行预测。 2. 衡量预测结果与真实值之间的损失。 3. 最后调整权重以使损失减小。 这种调整的步骤可以一直小到你接受为止当然这种调整也是有限度的是有边界的。
使用随机梯度下降训练神经网络。 每个迭代的训练数据样本被称为一个小批量通常简称为“批量”而完整的一轮训练数据被称为一个周期。
你训练的周期数决定了网络将会看到每个训练样本的次数。
上面左边第一幅图淡红色的点表示整个训练集而实心红点表示小批量。每当看到一个新的小批量时它会将权重斜率w和y截距b向着该批量上的正确值进行调整。一批一批地训练最终线条会收敛到最佳拟合。你可以看到随着权重接近其真实值损失越来越小。
学习率和批大小
请注意该行只在每个批次的方向上进行了小幅度的偏移而不是完全移动。这些偏移的大小由学习率决定。较小的学习率意味着网络需要看到更多的小批量数据才能使其权重收敛到最佳值。
学习率和小批量大小是对训练过程影响最大的两个参数。它们之间的相互作用常常是微妙的选择这些参数的正确方式并不总是明显的。我们将在练习中探讨这些影响。
幸运的是对于大多数工作来说不必进行广泛的超参数搜索就能获得令人满意的结果。Adam是一种具有自适应学习率的SGD算法它适用于大多数问题无需任何参数调整在某种意义上它是“自我调节的”。Adam是一个非常好的通用优化器。
添加损失函数和优化器
定义模型后可以使用模型的compile方法添加损失函数和优化器
model.compile(optimizeradam,lossmae,
)
请注意我们可以仅通过一个字符串来指定损失函数和优化器。您也可以通过Keras API直接访问这些如果您想要调整参数的话但对于我们来说使用默认值就可以了。 名字有什么重要性 梯度是一个向量告诉我们权重需要朝着哪个方向前进。 更准确地说它告诉我们如何改变权重以使损失函数最快地变化。 我们将这个过程称为梯度下降因为它使用梯度来沿着损失曲线向最小值降低。 随机意味着“由机会决定”。 我们的训练是随机的因为小批量是从数据集中随机抽取的样本。这就是为什么它被称为随机梯度下降SGD 例子 - 红酒品质
现在我们知道我们需要开始训练深度学习模型的一切了。那么让我们来看看它的实际效果吧我们将使用红酒质量数据集。 该数据集包含大约1600种葡萄牙红葡萄酒的理化测量数据。还包括每种葡萄酒的品质评级评级是通过盲品测试得出的。我们能否通过这些测量数据来预测葡萄酒的品质感知程度 我们已经将所有的数据准备工作放在了下一个隐藏单元中。 这并不是后面讨论的关键所以你可以随意跳过它。现在你可能要注意的一件事是我们已经将每个特征重新缩放到了区间 [0,1]。正如我们将在第5课中讨论的那样神经网络在输入具有相同的尺度时表现最佳。 import pandas as pd
from IPython.display import displayred_wine pd.read_csv(../input/dl-course-data/red-wine.csv)# Create training and validation splits
df_train red_wine.sample(frac0.7, random_state0)
df_valid red_wine.drop(df_train.index)
display(df_train.head(4))# Scale to [0, 1]
max_ df_train.max(axis0)
min_ df_train.min(axis0)
df_train (df_train - min_) / (max_ - min_)
df_valid (df_valid - min_) / (max_ - min_)# Split features and target
X_train df_train.drop(quality, axis1)
X_valid df_valid.drop(quality, axis1)
y_train df_train[quality]
y_valid df_valid[quality] 这个网络应该有多少个输入 我们可以通过查看数据矩阵中的列数来发现这一点。确保在这里不包括目标变量quality只包括输入特征。 print(X_train.shape) 十一个列意味着十一个输入。
我们选择了一个三层网络有超过1500个神经元。这个网络应该能够学习数据中相当复杂的关系。
from tensorflow import keras
from tensorflow.keras import layersmodel keras.Sequential([layers.Dense(512, activationrelu, input_shape[11]),layers.Dense(512, activationrelu),layers.Dense(512, activationrelu),layers.Dense(1),
])
决定模型架构应该是一个过程的一部分。从简单开始并以验证损失作为指导。
您将在练习中了解更多关于模型开发的内容。
定义模型之后我们编译优化器和损失函数。
model.compile(optimizeradam,lossmae,
)
现在我们准备开始训练
我们告诉Keras每次将256行训练数据一次性输入优化器即batch_size并在整个数据集上重复这个过程10次即epochs。
history model.fit(X_train, y_train,validation_data(X_valid, y_valid),batch_size256,epochs10,
) 你可以看到在模型训练过程中Keras会实时更新并显示损失值。 通常更好的观察损失的方法是将其绘制出来。实际上fit方法会在训练过程中记录损失值并保存在一个名为History的对象中。我们将把这些数据转换为Pandas的dataframe格式以便更容易进行绘图。 import pandas as pd# convert the training history to a dataframe
history_df pd.DataFrame(history.history)
# use Pandas native plot method
history_df[loss].plot(); 注意随着每个周期的进行损失逐渐趋于平缓。当损失曲线变得水平时意味着模型已经学习到了它所能学习的所有知识没有继续训练更多周期的必要了。
练习随机梯度下降
介绍
在这个练习中您将在燃油经济数据集上训练神经网络然后探索学习率和批处理大小对随机梯度下降SGD的影响。
当您准备好后请运行以下代码
# Setup plotting
import matplotlib.pyplot as plt
from learntools.deep_learning_intro.dltools import animate_sgd
plt.style.use(seaborn-whitegrid)
# Set Matplotlib defaults
plt.rc(figure, autolayoutTrue)
plt.rc(axes, labelweightbold, labelsizelarge,titleweightbold, titlesize18, titlepad10)
plt.rc(animation, htmlhtml5)# Setup feedback system
from learntools.core import binder
binder.bind(globals())
from learntools.deep_learning_intro.ex3 import * 在燃油经济数据集中您的任务是根据其发动机类型或制造年份等特征预测汽车的燃油经济性。
首先通过运行下面的单元格来加载数据集。
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import make_column_transformer, make_column_selector
from sklearn.model_selection import train_test_splitfuel pd.read_csv(../input/dl-course-data/fuel.csv)X fuel.copy()
# Remove target
y X.pop(FE)preprocessor make_column_transformer((StandardScaler(),make_column_selector(dtype_includenp.number)),(OneHotEncoder(sparseFalse),make_column_selector(dtype_includeobject)),
)X preprocessor.fit_transform(X)
y np.log(y) # log transform target instead of standardizinginput_shape [X.shape[1]]
print(Input shape: {}.format(input_shape))
如果你喜欢的话可以看一下数据。
在这个案例中我们的目标是“FE”列其余列都是特征。
# Uncomment to see original data
fuel.head()
# Uncomment to see processed features
pd.DataFrame(X[:10,:]).head()
下面是定义我们将用于此任务的网络。
from tensorflow import keras
from tensorflow.keras import layersmodel keras.Sequential([layers.Dense(128, activationrelu, input_shapeinput_shape),layers.Dense(128, activationrelu), layers.Dense(64, activationrelu),layers.Dense(1),
])
1.添加损失函数和优化器。
在训练网络之前我们需要定义要使用的损失函数和优化器。使用模型的compile方法添加Adam优化器和MAE损失。
# YOUR CODE HERE
____# Check your answer
q_1.check()
# Lines below will give you a hint or solution code
#q_1.hint()
#q_1.solution()
2.训练模型
一旦您已经定义了模型并使用损失函数和优化器进行了编译您就可以开始训练了。
使用批量大小为128在200个周期内训练网络。输入数据为X目标为y。
# YOUR CODE HERE
history ____# Check your answer
q_2.check()
# Lines below will give you a hint or solution code
#q_2.hint()
#q_2.solution()
最后一步是查看损失曲线并评估训练情况。运行下面的单元格以获得训练损失的图表。
import pandas as pdhistory_df pd.DataFrame(history.history)
# Start the plot at epoch 5. You can change this to get a different view.
history_df.loc[5:, [loss]].plot();
评估培训成功程度
如果您进一步训练模型您是否预期损失会进一步减少
# View the solution (Run this cell to receive credit!)
q_3.check()
你通过学习率和批量大小可以对以下方面进行一定程度的控制 * 模型训练所花费的时间 * 学习曲线的噪声程度 * 损失的减小程度 为了更好地理解这两个参数我们将看看线性模型即最简单的神经网络。
只有一个权重和一个偏置更容易看出参数的变化会产生什么影响。
下一个单元格将生成类似教程中的动画。
更改learning_rate、batch_size和num_examples数据点的数量然后运行该单元格。可能需要一两分钟。尝试以下组合或尝试一些自己的组合
# YOUR CODE HERE: Experiment with different values for the learning rate, batch size, and number of examples
learning_rate 0.05
batch_size 32
num_examples 256animate_sgd(learning_ratelearning_rate,batch_sizebatch_size,num_examplesnum_examples,# You can also change these, if you likesteps50, # total training steps (batches seen)true_w3.0, # the slope of the datatrue_b2.0, # the bias of the data
)
学习率和批量大小
这些参数的变化产生了什么影响在你考虑完后观察下面代码后进行讨论。
# View the solution (Run this cell to receive credit!)
q_4.check() 小伙伴们可以参考我这个系列中前面的文章搭建环境自己演练一下会有更深的理解。 文章转载自: http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.ctqlq.cn.gov.cn.ctqlq.cn http://www.morning.hhxwr.cn.gov.cn.hhxwr.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.qwlml.cn.gov.cn.qwlml.cn http://www.morning.wxfgg.cn.gov.cn.wxfgg.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.cljmx.cn.gov.cn.cljmx.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.qwlml.cn.gov.cn.qwlml.cn http://www.morning.krjrb.cn.gov.cn.krjrb.cn http://www.morning.nbnpb.cn.gov.cn.nbnpb.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.ygztf.cn.gov.cn.ygztf.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.nclps.cn.gov.cn.nclps.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.skfkx.cn.gov.cn.skfkx.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.pkdng.cn.gov.cn.pkdng.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.zqwqy.cn.gov.cn.zqwqy.cn http://www.morning.chmkt.cn.gov.cn.chmkt.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.dhyqg.cn.gov.cn.dhyqg.cn http://www.morning.cwqpl.cn.gov.cn.cwqpl.cn http://www.morning.nlmm.cn.gov.cn.nlmm.cn http://www.morning.jbqwb.cn.gov.cn.jbqwb.cn http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.hrkth.cn.gov.cn.hrkth.cn http://www.morning.fjntg.cn.gov.cn.fjntg.cn http://www.morning.bnrff.cn.gov.cn.bnrff.cn http://www.morning.khtjn.cn.gov.cn.khtjn.cn http://www.morning.gwqkk.cn.gov.cn.gwqkk.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.ltksw.cn.gov.cn.ltksw.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.fpyll.cn.gov.cn.fpyll.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.jzlkq.cn.gov.cn.jzlkq.cn http://www.morning.kgjyy.cn.gov.cn.kgjyy.cn http://www.morning.gjlst.cn.gov.cn.gjlst.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.pkwwq.cn.gov.cn.pkwwq.cn http://www.morning.mmtbn.cn.gov.cn.mmtbn.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.thlr.cn.gov.cn.thlr.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.hncrc.cn.gov.cn.hncrc.cn http://www.morning.rhmpk.cn.gov.cn.rhmpk.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.xcyhy.cn.gov.cn.xcyhy.cn http://www.morning.rfzbm.cn.gov.cn.rfzbm.cn http://www.morning.plnry.cn.gov.cn.plnry.cn