在 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 联系我,提出任何评论或问题!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1098680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Markdown数学公式渲染:Miniconda-Python3.10支持LaTeX格式输出

Markdown数学公式渲染:Miniconda-Python3.10支持LaTeX格式输出 在撰写算法推导、教学讲义或科研笔记时,你是否曾为无法直观展示复杂公式而苦恼?比如写到薛定谔方程时只能贴图,修改一次就得重新截图;或者团队协作中有人…

HardFault_Handler中R14寄存器(LR)状态分析核心要点

深入HardFault:从LR寄存器看透系统崩溃真相你有没有遇到过这样的场景?设备在客户现场突然“死机”,没有明显征兆,复现困难。连接调试器一看,停在了HardFault_Handler——这个神秘又令人头疼的函数。在ARM Cortex-M的世…

Docker build缓存优化:Miniconda-Python3.10加快镜像构建速度

Docker构建加速实战:用Miniconda-Python3.10优化镜像缓存 在AI模型训练或数据科学项目的CI/CD流水线中,你是否经历过这样的场景?每次提交代码后,CI系统都要花8到10分钟重新安装PyTorch、TensorFlow这些大包——即使你只是改了一行…

综合实践报告

非遗万象图:一次多源异构数据采集与融合应用的综合实践项目所属课程 2025数据采集与融合技术组名、项目简介 组名:数据全部收入囊中项目需求: 本项目旨在打造一个集非遗展示、知识探索与互动体验于一体的数字化平台…

PyTorch模型训练中断?Miniconda-Python3.10恢复断点续训配置方法

PyTorch模型训练中断?Miniconda-Python3.10恢复断点续训配置方法 在深度学习项目中,一次完整的模型训练动辄需要几十甚至上百个epoch,尤其是面对大规模数据集或复杂网络结构时,整个过程可能持续数天。你有没有经历过这样的场景&am…

PyTorch安装卡住?试试清华镜像源+Miniconda双加速

PyTorch安装卡住?试试清华镜像源Miniconda双加速 在深度学习项目刚启动的那一刻,你是不是也经历过这样的场景:满怀期待地打开终端,输入 conda install pytorch,然后眼睁睁看着进度条卡在“Solving environment…”长达…

Jupyter Notebook连接远程服务器SSH配置图文教程

Jupyter Notebook 连接远程服务器 SSH 配置实战指南 在数据科学和人工智能开发中,一个常见的场景是:你手头的笔记本电脑跑不动大型模型训练,但公司或实验室有一台配备多块 GPU 的远程服务器。你想用熟悉的 Jupyter 写代码、看图表&#xff0c…

Linux权限管理最佳实践:Miniconda-Python3.10多用户环境配置

Linux权限管理最佳实践:Miniconda-Python3.10多用户环境配置 在高校实验室、AI研发团队或企业级计算平台中,一个常见的痛点是:新成员刚接入服务器,运行代码时却报错“ModuleNotFoundError”;或是某人升级了公共环境中的…

面向工业自动化的Keil5破解环境搭建从零实现

手把手教你搭建工业级Keil5开发环境:从零开始,不踩坑你有没有遇到过这样的情况?正在调试一个复杂的电机控制算法,代码刚写到一半,突然编译失败,弹出一条红色警告:*** ERROR L250: CODE SIZE LIM…

解决MDK常见错误提示:入门阶段典型问题图解说明

MDK开发避坑指南:5大高频错误实战解析 你有没有过这样的经历? 明明代码写得一丝不苟,点击“Build”却弹出一个冷冰冰的 “Target not created” ; 调试器连好了,一按下载按钮却提示 “No target connected” &am…

利用Conda创建独立环境避免PyTorch版本冲突问题

利用 Conda 创建独立环境避免 PyTorch 版本冲突问题 在现代 AI 开发中,一个看似不起眼却频繁困扰开发者的问题浮出水面:为什么昨天还能跑通的代码,今天突然报错说 torch.compile() 不存在? 答案往往简单得令人沮丧——有人升级了全…

Pyenv全局版本不生效?Miniconda-Python3.10 source activate明确激活

Pyenv全局版本不生效?Miniconda-Python3.10 source activate明确激活 在现代AI与数据科学开发中,Python环境的混乱常常成为项目推进的“隐形杀手”。你是否曾遇到这样的场景:明明用 pyenv global 3.10.12 设置了全局版本,新开终端…

Token去重算法优化:Miniconda-Python3.10提升大模型输入效率

Token去重算法优化:Miniconda-Python3.10提升大模型输入效率 在大语言模型(LLM)训练日益复杂的今天,一个常被忽视却至关重要的环节正悄然影响着模型表现——输入Token的质量。我们往往把注意力集中在模型架构、参数规模和训练策略…

如何在Miniconda中正确安装cudatoolkit以支持PyTorch GPU

如何在 Miniconda 中正确安装 cudatoolkit 以支持 PyTorch GPU 在深度学习项目中,GPU 加速几乎是训练模型的标配。然而,许多开发者在尝试将 PyTorch 部署到 Miniconda 环境时,常常遇到 torch.cuda.is_available() 返回 False 的问题——明明有…

Jupyter Lab多语言内核:Miniconda-Python3.10集成R或Julia扩展

Jupyter Lab多语言内核:Miniconda-Python3.10集成R或Julia扩展 在数据科学和科研计算的日常实践中,一个常见的困境是:团队成员各有所长——有人精通 Python 的机器学习生态,有人依赖 R 语言进行统计建模,还有人用 Jul…

Linux服务器资源监控:Miniconda-Python3.10集成nvidia-smi调用脚本

Linux服务器资源监控:Miniconda-Python3.10集成nvidia-smi调用脚本 在AI实验室或生产环境中,你是否曾遇到这样的场景:深夜的训练任务突然卡顿,登录服务器执行 nvidia-smi 却发现GPU利用率跌至个位数,而显存几乎占满&am…

AUTOSAR架构中的复杂驱动:项目应用实例解析

AUTOSAR架构下的复杂驱动实战:从摄像头同步到环视系统设计 当汽车电子遇上“非标外设” 一辆智能SUV停在测试场,四路鱼眼摄像头正实时捕捉周围环境,中控屏上流畅拼接出360无死角的鸟瞰画面。这看似简单的功能背后,藏着一个关键问题…

Pyenv环境切换卡顿?Miniconda-Python3.10提供更稳定的替代方案

Pyenv环境切换卡顿?Miniconda-Python3.10提供更稳定的替代方案 在AI与数据科学项目日益复杂的今天,一个常见的开发痛点悄然浮现:明明只是想切换个Python版本,pyenv global 3.10 却卡住好几秒,终端无响应,甚…

SSH端口转发绕过防火墙:访问受限的Miniconda-Python3.10服务

SSH端口转发绕过防火墙:访问受限的Miniconda-Python3.10服务 在高校实验室、企业内网或云平台开发环境中,你是否遇到过这样的场景?一台配置了GPU的远程服务器上跑着Jupyter Notebook,环境是精心配置的 Miniconda Python 3.10&…

从Anaconda迁移到Miniconda:更轻更快的大模型开发体验

从Anaconda迁移到Miniconda:更轻更快的大模型开发体验 在大模型研发日益普及的今天,一个干净、稳定且可复现的开发环境,往往比算法调优更能决定项目的成败。你是否曾遇到过这样的场景:昨天还能正常训练的代码,今天却因…