TensorFlow 和 PyTorch两大深度学习框架训练素材,并协作一个电商推荐系统

news/2025/9/24 8:07:09/文章来源:https://www.cnblogs.com/tlnshuju/p/19108495

TensorFlow 和 PyTorch两大深度学习框架训练素材,并协作一个电商推荐系统

2025-09-24 08:01  tlnshuju  阅读(0)  评论(0)    收藏  举报

TensorFlow (由Google开发): 更像一个工业化、高度优化的精密生产工具包。它设计严谨,适合大规模部署和生产环境,最初需要先定义好整个计算图再运行(静态图)。因其完整的生态系统(如TensorFlow Serving, TensorFlow Lite)而拥有强大优势。适合工业界/生产部署

PyTorch (由Facebook开发): 更像一个灵活、易用的科研实验工具包。它非常符合Python的直觉,支持动态定义计算图(更易调试),深受研究人员和初学者的喜爱。

共同功能:

  • 提供张量计算:强大的N维数组(称为张量)操作,支持GPU加速。
  • 自动求导(Autograd):自动计算梯度,这是训练神经网络的核心。
  • 预构建的神经网络层:提供了大量现成的层(如卷积层、LSTM层),让你像搭积木一样构建网络。
  • 丰富的生态系统:提供从数据加载、模型训练到部署的全套工具。

用PyTorch训练一个图像分类器

在这里插入图片描述

一、环境准备,安装PyTorch。通常使用pip或conda安装

pip install torch torchvision

二、定义数据转换,加载训练数据集

  • 深度学习项目大量时间花在数据准备上。PyTorch提供了Dataset和DataLoader来高效处理数据。
  • transforms.Compose() 将图像数据转换为Tensor,并做归一化
  • datasets.MNIST()
  • DataLoader()
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import DataLoader
import torchvision.datasets as datasets
import torchvision.transforms as transforms
# 定义数据转换:将图像数据转换为Tensor,并做归一化
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差
])
# 下载并加载训练数据集
train_dataset = datasets.MNIST(
root='./data',
train=True,
download=True,
transform=transform
)
train_loader = DataLoader(
dataset=train_dataset,
batch_size=64, # 每次训练64张图片
shuffle=True # 打乱数据顺序
)
# 下载并加载测试数据集
test_dataset = datasets.MNIST(
root='./data',
train=False,
download=True,
transform=transform
)
test_loader = DataLoader(
dataset=test_dataset,
batch_size=64,
shuffle=False
)

三、构建神经网络模型 (nn.Module)

  • 通过继承nn.Module类来定义我们自己的网络结构
class SimpleNN
(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
# 定义网络层
self.fc1 = nn.Linear(28*28, 128) # 全连接层1: 输入28*28=784, 输出128
self.fc2 = nn.Linear(128, 64) # 全连接层2: 输入128, 输出64
self.fc3 = nn.Linear(64, 10) # 全连接层3: 输入64, 输出10 (10个类别)
def forward(self, x):
# 定义数据如何向前传播
x = x.view(-1, 28*28) # 将图片展平 [batch_size, 784]
x = F.relu(self.fc1(x)) # 通过第一层后使用ReLU激活函数
x = F.relu(self.fc2(x)) # 通过第二层后使用ReLU激活函数
x = self.fc3(x) # 最后一层不需要激活函数(配合CrossEntropyLoss)
return x
# 创建模型实例,并移至GPU(如果可用)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = SimpleNN().to(device)

四、定义损失函数和优化器

criterion = nn.CrossEntropyLoss() # 损失函数:对于多分类问题常用交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001) # 优化器:使用Adam来更新权重

五、训练模型

  • 前向传播 -> 计算损失 -> 反向传播 -> 更新权重
num_epochs = 5
for epoch in range(num_epochs):
model.train() # 设置模型为训练模式
for batch_idx, (data, targets) in enumerate(train_loader):
# 将数据移至设备(GPU/CPU)
data = data.to(device=device)
targets = targets.to(device=device)
# 前向传播
scores = model(data)
loss = criterion(scores, targets)
# 反向传播
optimizer.zero_grad() # 清零上一轮的梯度
loss.backward() # 自动计算梯度(反向传播)
# 更新模型参数
optimizer.step() # 根据梯度更新权重

六、评估模型性能

  • 训练完成后,我们需要在测试集上检查模型的表现
def check_accuracy(loader, model):
model.eval() # 设置模型为评估模式
num_correct = 0
num_samples = 0
with torch.no_grad(): # 在评估时不需要计算梯度,节省内存和计算
for x, y in loader:
x = x.to(device=device)
y = y.to(device=device)
scores = model(x)
_, predictions = scores.max(1) # 获取概率最高的类别作为预测结果
num_correct += (predictions == y).sum()
num_samples += predictions.size(0)
accuracy = float(num_correct) / float(num_samples) * 100
print(f'Got {num_correct
} / {num_samples
} with accuracy {accuracy:.2f
}%')
check_accuracy(test_loader, model)

七、进行预测

# 取一个批次的数据进行演示
data_iter = iter(test_loader)
images, labels = next(data_iter)
img = images[0] # 取第一张图片
# 需要添加一个批次维度 [1, 1, 28, 28]
img = img.unsqueeze(0).to(device)
# 预测
model.eval()
with torch.no_grad():
output = model(img)
_, predicted = torch.max(output.data, 1)
print(f'Predicted digit: {predicted.item()
}')

用TensorFlow 2.x的高级API Keras 来实现

import tensorflow as tf
from tensorflow.keras import layers, models
# 1. 加载数据
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # 归一化
# 2. 构建模型 (极其简洁的API)
model = models.Sequential([
layers.Flatten(input_shape=(28, 28)),
layers.Dense(128, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(10)
])
# 3. 编译模型 (定义损失和优化器)
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 4. 训练模型
model.fit(x_train, y_train, epochs=5)
# 5. 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'\nTest accuracy: {test_acc
}')

T

TensorFlow 与 PyTorch 的协作与共存

项目:电商个性化推荐系统
根据用户的实时行为(点击、浏览、加购),快速预测其可能感兴趣的商品并展示

架构设计:

  • PyTorch:用于研究和快速迭代推荐系统的核心深度学习模型(如基于 Transformer的深度兴趣网络)。其动态图特性方便调试和实验新想法。
  • TensorFlow:用于大规模特征处理(使用 TFX 组件)和高性能线上推理服务(使用 TensorFlowServing)。其静态图和在部署端的优化能保证线上服务的稳定性与效率。
  • 协作方式:模型服务化接口。将 PyTorch 训练好的最终模型转换为 ONNX 或 TorchScript 格式,并在TensorFlow Serving 的定制化Docker 镜像中集成 ONNX Runtime 来加载和服务,对外提供统一的gRPC/REST API。

在这里插入图片描述

一、模型研发与训练 (PyTorch 环境)

  • 环境:安装 PyTorch, TorchVision, ONNX, pandas, scikit-learn 等库
  • 数据预处理与特征工程:使用 PyTorch 的 DataLoader 和 Pandas 处理用户和商品数据,构建特征
  • 模型构建与训练:在 PyTorch 中定义、训练并验证推荐模型
  • 模型导出:训练完成后,将模型导出为 ONNX 格式,以便在其他环境中使用
#conda create -n reco_research python=3.10
#conda activate reco_research
#pip install torch torchvision onnx pandas scikit-learn
# 示例:简单的特征处理
import pandas as pd
import torch
from torch.utils.data import Dataset
class RecoDataset
(Dataset):
def __init__(self, data_path):
self.data = pd.read_parquet(data_path)
self.user_features = ... # 处理用户特征
self.item_features = ... # 处理商品特征
self.labels = self.data['label'].values
def __getitem__(self, index):
return (torch.tensor(self.user_features[index], dtype=torch.float),
torch.tensor(self.item_features[index], dtype=torch.float),
torch.tensor(self.labels[index], dtype=torch.float))
def __len__(self):
return len(self.data)
# 示例:定义一个简单的神经网络
import torch.nn as nn
class DIN
(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(input_dim, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 1),
nn.Sigmoid()
)
def forward(self, user_feat, item_feat):
x = torch.cat([user_feat, item_feat], dim=1)
return self.encoder(x)
# 训练循环(伪代码)
model = DIN(input_dim=user_dim + item_dim)
criterion = nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters())
# ... 在DataLoader上循环进行训练和评估 ...
# 导出模型为ONNX格式
dummy_user_input = torch.randn(1, user_dim)
dummy_item_input = torch.randn(1, item_dim)
torch.onnx.export(model,
(dummy_user_input, dummy_item_input),
"din_model.onnx",
input_names=["user_input", "item_input"],
output_names=["output"],
dynamic_axes={
"user_input": {
0: "batch_size"
},
"item_input": {
0: "batch_size"
},
"output": {
0: "batch_size"
}
})

二、生产环境部署 (TensorFlow 生态系统)

①、环境准备:准备生产环境,可能需要使用 Docker。在镜像中同时安装 TensorFlow Serving 和 ONNX Runtime

# 基于TensorFlow Serving的官方镜像,安装ONNX Runtime
FROM tensorflow/serving:latest
# ... 安装ONNX Runtime的步骤 ...

②、配置 TensorFlow Serving:将导出的 din_model.onnx 模型放入 TensorFlow Serving 的模型仓库目录,并编写配置文件 (models.config) 指定模型名称、路径等

model_config_list: {
config: {
name: "dIN_model",
base_path: "/models/din_model",
model_platform: "onnx", # 表明是ONNX模型
}
}

③、启动服务:启动 TensorFlow Serving 容器,并指定配置文件和端口映射

docker run -p 8501:8501 \
--mount type=bind,source=/path/to/your/model_repo/,target=/models \
-t tensorflow/serving:latest \
--model_config_file=/models/models.config

三、线上推理 (应用端)

①、客户端请求:线上的应用服务(如 Java, Go 或 Python 编写)通过 HTTP/REST 或 gRPC 向 TensorFlow Serving 服务发起推理请求。请求体中需要包含序列化后的特征数据(格式需要与导出 ONNX 模型时的输入一致)

# 示例:使用Python客户端发送请求
import requests
import json
# 准备请求数据
data = {
"signature_name": "serving_default",
"inputs": {
"user_input": user_feat_list.tolist(), # 用户特征向量
"item_input": item_feat_list.tolist() # 商品特征向量
}
}
# 发送请求到TensorFlow Serving
headers = {
"content-type": "application/json"
}
response = requests.post('http://localhost:8501/v1/models/dIN_model:predict',
data=json.dumps(data), headers=headers)
predictions = response.json()['outputs'] # 获取预测结果

2、结果返回与处理:应用端接收到预测结果后,根据得分进行排序、过滤等后续业务逻辑处理,最终将推荐列表展示给用户。

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

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

相关文章

VMware VeloCloud 漏洞分析:未授权远程代码执行全链条攻破

本文深入分析VMware VeloCloud Orchestrator中存在的三个关键漏洞:认证绕过、SQL注入和目录遍历漏洞。通过组合利用这些漏洞,攻击者可在未授权情况下实现远程代码执行,最终控制企业整个国际网络基础设施。SD-PWN 第…

做网站需要的课程优化方案官网

一、Spring bean 1.1、概述 一句话,被Spring容器管理的bean就是Spring bean。 二、Java bean VS Spring bean 2.1、概述 Java bean是程序员自己new 出来的,Spring bean是Spring工厂创建出来的。 三、配置bean的方式 3.1、概述 所谓配置bean&#xff0…

做任务领佣金的网站中国室内设计大奖赛

🚀🚀🚀本文改进:Ghost bottleneck为堆叠Ghost模块 ,与YOLOV8建立轻量C2f_GhostBottleneck 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Ghostnet介绍 论文: https://arxiv.org/pdf/1911.11907.…

网站建设黄页免费观看济南品牌网站建设价格

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! …

网站怎么备案工业软件开发需要学什么专业

恭喜微软连续 13 年被Gartner评为BI平台领导者。您可以插上耳机,打开音乐来一起欣赏这个过程。原文地址:https://powerbi.microsoft.com/zh-cn/blog/microsoft-named-a-leader-in-gartners-2020-magic-quadrant-for-analytics-and-bi-platforms/被评为第…

wordpress网站监测怎么进入官方网站查询

Docker是一种容器化平台,它可以轻松地封装、分发和运行应用程序和服务。 Docker的基本概念包括: 容器:一个独立运行的、可移植的软件包,包含应用程序、运行环境和依赖项。容器可以在不同的环境中运行,而不受环境差异的…

wordpress可以问答网站整站优化

与ChatGPT类似的国内网站,他们都能提供和ChatGPT相似的能力,而且可以在国内直接使用。 点击直达方式 百科GPT官网:baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例,由OpenAI开发。以下是ChatGPT的发展历史&#xff1…

佛山建站公司排名苏州网站建设免费

需要对文件夹app_code下的AlipayConfig中的几个参数进行配置: 需要注意:只需要配置partner和private_key两个参数,支付宝的public_key无需更改 private_key是通过openssl工具进行PKCS8格式转换过后的私钥 static Config() {//↓↓↓↓↓↓↓…

淘宝客网站做seo有用吗软件界面设计教程

poli一个易于使用的SQL报告应用程序,专为SQL爱好者而设计。SQL中的电源数据分析,可获得更快的业务洞察力。特性⚡️ 自托管和轻松设置平台独立的Web应用程序 单个JAR文件单个SQLite DB文件。在5分钟内启动并运行。连接任何支持JDBC驱动程序的数据库Postg…

芜湖商城网站建设免费虚拟服务器

什么是ChatGPT批量写作文章。简单来说,它是一种使用ChatGPT技术的方法,可以帮助您批量生成各种类型的文章和内容。无论您是需要新闻报道、博客文章、产品描述、社交媒体帖子还是其他类型的内容,ChatGPT都能满足您的需求。它可以在极短的时间内…

macos ld: unsupported tapi file type !tapi-tbd in YAML file 问题解决

macos ld: unsupported tapi file type !tapi-tbd in YAML file 问题解决实际此问题属于一个比较常见的问题,解决方法实际上都是一样的,就是升级llvm,gcc 等,但是我系统使用了相关解决方法依然没解决,后边发现是因…

厦门无忧网站建设有限公司网站建设合同英文

目录 一 软件安装启动 二 如何打开IP核?查看/修改现有IP核参数? 三 如何定义引脚? 四 如何下载code进入FPGA? 1. 下载到FPGA芯片内: 2.下载到外部FLASH中 五 如何进入在线调试模式,调试步骤 操作步骤&#xff…

十堰网站seo技巧扬州哪里做网站好

为什么要用AOP ①现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中,不利于统一维护 ②解决思路 解决这两个问题&…

html5wap网站模板上海天华建筑设计有限公司侯岳

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、生产者消费者模型二、基于阻塞队列的生产者消费者模型代码实现 总结 前言 本文是对于生产者消费者模型的知识总结 一、生产者消费者模型 生产者消费者模型就是…

强大的网站wordpress分类目录 404

​ 引言 为了保护Flutter应用免受潜在的漏洞和攻击威胁,加固是必不可少的措施之一。Flutter加固原理主要包括代码混淆、数据加密、安全存储、反调试与反分析、动态加载和安全通信等多个方面。通过综合运用这些措施,可以提高Flutter应用的安全性&#xf…

网站开发税收分类2_试列出网站开发建设的步骤

展开全部在SQL中 CHECK 的意思:约束CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么32313133353236313431303231363533e58685e5aeb931333365646261该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定…

网站开发pmp给公司做一个网站

深度学习介绍: 数据预处理

wap网站开发需要多少钱做网站怎么qq邮箱验证

在处理大量PDF文档时,有时我们需要快速找到特定的文本信息。本文将提供以下三个Python示例来帮助你在PDF文件中快速查找并高亮指定的文本。 查找并高亮PDF中所有的指定文本查找并高亮PDF某个区域内的指定文本使用正则表达式搜索指定文本并高亮 本文将用到国产第三方…

购物节优惠卷网站怎么做专业企业网站设计网络公司

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 文件操作 1、文件的顺序读写 1.1、顺序读写函数介绍 1.1.1、fgetc 与 fputc 1.1.2、fgets 与 fputs 1.1.3、fscanf 与 fprintf 1.1.4、fread 与 fwrite 1.…

【GitHub每日速递 250924】18 个 AI 投资大师齐上阵!这个开源对冲基金让你看透市场底牌

AI赋能对冲基金!18大智能代理协作,交易决策新玩法揭秘 virattt/ai-hedge-fund 是一个基于人工智能技术进行自动化投资决策的金融项目。简单讲,它是一个用Python构建的AI对冲基金团队,通过算法分析市场数据并执行交…