news 2026/7/15 5:42:18

在 TensorFlow(和 PyTorch)中实现神经网络

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 TensorFlow(和 PyTorch)中实现神经网络

原文:towardsdatascience.com/implementing-neural-networks-in-tensorflow-and-pytorch-3c1f097e412a

欢迎来到我们**深度学习图解**系列的实用实施指南。在这个系列中,我们将弥合理论与实践之间的差距,将之前文章中探讨的神经网络概念生动地呈现出来。

深度学习,图解

记得我们之前讨论的用于预测冰淇淋收入的简单神经网络吗?我们将使用 TensorFlow 构建它,这是一个创建神经网络的强大工具。

深度学习图解,第二部分:神经网络是如何学习的?

而且关键是:我们将在不到 5 分钟内用 27 行代码完成!

**让我们首先从:什么是TensorFlow?**开始

TensorFlow 是一个构建和部署机器学习应用的全面生态系统,包括工具、库和社区资源。由谷歌开发,它旨在灵活高效,能够在从 CPU 到 GPU 甚至专门的硬件如 TPU 的各种平台上运行。TensorFlow 这个名字来源于其核心概念:张量流。张量,即多维数组,在训练和推理过程中通过计算图流动。

好的,让我们开始构建我们的神经网络。该模型的目标是根据两个特征:温度和星期几来预测每日冰淇淋收入。我们将逐步进行,解释每个过程组件。

第 1 步:数据准备

首先,我们将翻译之前使用的冰淇淋销售数据…

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/19e02e40d292b146f3fc8ac5f057fc74.png

…转换成适合我们神经网络的形式:

importnumpyasnp# Dataday=[2,6,1,3,2,5,7,4,3,1]temperature=[22,33,20,25,24,30,35,28,26,21]revenue=[1.51,2.22,1.37,1.77,1.64,2.04,2.42,1.90,1.75,1.45]# Combine day and temperature into a single feature arrayX_train=np.column_stack((day,temperature))y_train=np.array(revenue)

这将创建我们的输入特征,X_train

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/06b96947e8e946c20301d669683b9efc.png

…以及目标值,y_train

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fe4cd534072657bf13c0bdad7e97003d.png

第 2 步:标准化数据

接下来,我们将标准化我们的数据。标准化是一个关键的预处理步骤,它将特征转换为具有零均值和标准差为 1 的形式。

fromsklearn.preprocessingimportStandardScaler# Standardize the featuresscaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)

这确保了所有特征在模型中平等地贡献,提高训练过程中的收敛速度和稳定性。

第 3 步:构建神经网络

在这一步,我们定义我们的神经网络模型。我们之前决定,该架构由一个包含两个神经元和一个输出神经元的隐藏层组成,所有这些神经元都使用 ReLU 激活函数。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4fe51fbf39987a931883fd9acb7c3edf.png

让我们坚持这个相同的架构,并将其翻译成代码。我们使用 TensorFlow 的 Keras API 构建我们的神经网络。

fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense# Initialize the modelmodel=Sequential()# Add hidden layer - 2 neurons with the ReLU activation function with 2 inputsmodel.add(Dense(2,input_dim=2,activation='relu'))# Add output layer - 1 neuron with the ReLU activation functionmodel.add(Dense(1,activation='relu'))

Sequential模型允许我们构建层堆叠。Dense层是完全连接层,其中每一层的每个神经元都与下一层的每个神经元相连。

第 4 步:编译和训练模型

在训练之前,我们需要编译我们的模型:

# Compile the modelmodel.compile(optimizer='adam',loss='mean_squared_error')

编译是一个关键步骤,它配置了学习过程。在这里,我们指定:

  1. 优化器:adam(自适应动量估计),它在训练过程中调整学习率。

  2. 损失函数:均方误差(MSE),它衡量预测值与实际值之间平均平方差的度量。

_ 注意:在这里我们使用了 Adam 优化器,但我们可以使用任何其他合理的优化算法。这里列出了我们可以在 TensorFlow 中使用的所有优化算法。同样,我们可以在这里使用定义的任何损失函数。_

现在我们可以训练我们的模型:

# Train the modelhistory=model.fit(X_train_scaled,y_train,epochs=100,verbose=1)

fit方法是实际学习发生的地方。我们指定输入特征(X_train_scaled)、目标值(y_train)和训练周期数(epochs)。verbose参数控制训练过程中的输出级别。

我们可以可视化训练过程:

importmatplotlib.pyplotasplt# Plot training loss over epochsplt.plot(history.history['loss'])plt.title('Model Training Loss')plt.xlabel('Epochs')plt.ylabel('Loss')plt.show()

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/aa0776e8958c7037e4b8bdb92c56a93d.png

此图说明了我们的损失(预测误差)随时间如何降低,从而提供了对学习过程的洞察。

第 5 步:进行预测

最后,我们可以使用我们的训练模型进行预测:

fromsklearn.metricsimportmean_squared_error# Make predictions on the training datapredictions=model.predict(X_train_scaled)print("Predicted Revenues on Training Data:",predictions)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4f296fc1a2eaae65f9fe4a49ed3743d8.png

在这里,我们使用我们的训练模型根据输入特征预测冰淇淋销量。如果我们想看看预测的准确性如何,我们可以使用 MSE 来衡量我们模型的准确性。

# Calculate the Mean Squared Errormse=mean_squared_error(y_train,predictions)print("Mean Squared Error on Training Data:",mse)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/37d15100efb65899f0674d578bc8555e.png

均方误差(MSE)并没有像我们希望的那样低,但没关系。这是一个非常基础的神经网络,整个目的就是增加复杂性和调整架构以提高我们的结果。

尽管这个例子使用了简单的数据集和模型架构,但我们所涵盖的原则为更复杂的神经网络应用奠定了基础。随着我们继续在深度学习中的旅程,我们将遇到更复杂的架构和更大的数据集,但基本过程保持不变。

奖励:PyTorch

现在我们已经看到了如何在 TensorFlow 中实现我们的模型,让我们看看如何使用另一个强大的框架:PyTorch 来达到相同的结果。PyTorch 是由 Facebook 的 AI 研究实验室开发的,以其灵活性和效率而闻名,使其成为热门选择之一。

importnumpyasnpimporttorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.preprocessingimportStandardScalerimportmatplotlib.pyplotasplt# Dataday=[2,6,1,3,2,5,7,4,3,1]temperature=[22,33,20,25,24,30,35,28,26,21]revenue=[1.51,2.22,1.37,1.77,1.64,2.04,2.42,1.90,1.75,1.45]# Convert to numpy arrayX=np.array(list(zip(day,temperature)),dtype=np.float32)y=np.array(revenue,dtype=np.float32)# Standardize the featuresscaler=StandardScaler()X_scaled=scaler.fit_transform(X)# Convert data to PyTorch tensorsX_tensor=torch.tensor(X_scaled,dtype=torch.float32)y_tensor=torch.tensor(y,dtype=torch.float32).view(-1,1)# Build the neural networkclassIceCreamSalesModel(nn.Module):def__init__(self):super(IceCreamSalesModel,self).__init__()self.hidden=nn.Linear(2,2)self.output=nn.Linear(2,1)self.relu=nn.ReLU()defforward(self,x):x=self.relu(self.hidden(x))x=self.output(x)returnx model=IceCreamSalesModel()# Define loss function and optimizercriterion=nn.MSELoss()optimizer=optim.Adam(model.parameters(),lr=0.01)# Train the modelnum_epochs=100losses=[]forepochinrange(num_epochs):# Forward passpredictions=model(X_tensor)loss=criterion(predictions,y_tensor)losses.append(loss.item())# Backward pass and optimizationoptimizer.zero_grad()loss.backward()optimizer.step()# Plot training lossplt.plot(losses)plt.xlabel('Epochs')plt.ylabel('Loss')plt.title('Training Loss')plt.show()# Make predictionswithtorch.no_grad():predictions=model(X_tensor)print("Predicted Revenue:",predictions.numpy())# Evaluate the modelmse_value=criterion(predictions,y_tensor).item()print("Mean Squared Error:",mse_value)

就这些了!我们已经学习了如何使用 TensorFlow 和 PyTorch 实现一个简单的神经网络来预测冰淇淋销量。在下一篇文章中,我们将介绍如何在两个框架中实现卷积神经网络(CNN)。

如往常一样,欢迎您通过 LinkedIn 联系我,提出任何评论或问题!

注意:除非特别说明,所有图片均为作者所有。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 2:46:24

Docker compose编排Miniconda-Python3.10容器集群支持多模型服务

Docker Compose 编排 Miniconda-Python3.10 容器集群支持多模型服务 在 AI 模型开发日益频繁的今天,一个常见的痛点浮出水面:同一个服务器上跑多个项目,却因为 PyTorch 版本、CUDA 支持或依赖冲突而彼此“打架”。你可能遇到过这种情况——本…

作者头像 李华
网站建设 2026/7/8 23:31:37

Anaconda Navigator不用了?Miniconda-Python3.10命令行更高效

告别臃肿图形界面:Miniconda Python 3.10 如何重塑高效开发体验 在数据科学与人工智能项目日益复杂的今天,一个常见的场景是:你刚刚拿到一台新的云服务器,准备复现论文中的深度学习实验。可当你兴冲冲地安装完 Anaconda&#xff…

作者头像 李华
网站建设 2026/7/13 12:11:58

企业级校园健康驿站管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着校园健康管理需求的日益增长,传统的人工管理方式已无法满足高效、精准的健康服务需求。校园健康驿站作为学生健康监测的重要载体,亟需一套智能化、信息化的管理系统,以实现健康数据的实时采集、分析和预警。该系统旨在通过信息化手段…

作者头像 李华
网站建设 2026/7/13 23:40:55

【2025最新】基于SpringBoot+Vue的校园竞赛管理系统管理系统源码+MyBatis+MySQL

摘要 随着信息技术的快速发展,校园竞赛活动的规模和复杂度逐年提升,传统的人工管理方式已无法满足高效、精准的需求。校园竞赛管理系统通过数字化手段实现竞赛信息发布、报名审核、成绩统计等功能,有效提升管理效率,减少人为错误。…

作者头像 李华
网站建设 2026/7/11 22:38:10

一个优雅到离谱的办法:把“只靠 JavaScript 才能用”的功能,自动藏起来

我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我我是在做一个更互动的网站时撞见这个小技巧的。我的分享按钮,必须等 JavaScript 加载后才真正能点。 我的主题切换也需要它。 移动端菜单更不…

作者头像 李华
网站建设 2026/7/8 6:32:38

CondaError汇总解析:Miniconda-Python3.10常见报错及解决方案

CondaError 汇总解析:Miniconda-Python3.10 常见报错及解决方案 在现代数据科学、AI 和软件工程实践中,Python 已成为事实上的标准语言。然而,随着项目依赖日益复杂,开发者常常陷入“这个包在我机器上能跑,为什么在服…

作者头像 李华