- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
本文介绍使用神经网络进行实战。 使用的代码是《零基础学习人工智能—Python—Pytorch学习(九)》里的代码.
首先我们自定义一个module,创建一个torch_test17_Model.py文件(这个module要单独用个py文件定义),如下:
import torch.nn as nn
import torch.nn.functional as F
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16*5*5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
return x
编写创建module的py文件,代码如下:
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import torch_test17_Model as tm
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
input_size = 784
hidden_size = 100
num_classes = 10
batch_size = 100
learning_rate = 0.001
num_epochs = 200 # 要训练200-400轮效果最好
transform = transforms.Compose(
[transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
train_dataset = torchvision.datasets.CIFAR10(
root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils. data.DataLoader(
dataset=train_dataset, batch_size=batch_size, shuffle=True)
model = tm.ConvNet().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
n_total_steps = len(train_loader)
print("number total epochs(训练的回合):",num_epochs)
print("number total steps(训练的次数):",n_total_steps)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
# images.shape: torch.Size([100, 3, 32, 32])
# images张量的四个维度是(B, C, H, W)
# B 是批量大小(即图像的数量)。
# C 是图像的通道数(例如,RGB 图像的通道数是 3)。
# H 和 W 分别是图像的高度和宽度。
print("images.shape:", images.shape) #100行,后面的维度是3,32,32。这个是图片信息。
# lables是对应images这100个图片的标签
print("labels.shape:", labels.shape)
print("labels[0].item():", labels[0].item()) # 输出例子 labels[0].item()=6
images = images.to(device)
labels = labels.to(device)
# 前向传播
outputs = model(images)
loss = criterion(outputs, labels)
print("loss.item()",loss.item()) # 输出例子 loss.item()=2.300053596496582
# 逆向传播和优化
optimizer.zero_grad()
loss.backward() ##执行逆向传播 会使用criterion的函数关系求偏导,然后把x的值,带入偏导公式求值,然后再乘以loss,得到新x值
optimizer.step()
print(f'训练轮次Epoch [{epoch}/{num_epochs}], Step [{i+1}/{n_total_steps}], Loss: {loss.item():.4f}')
print('==================')
print('训练结束')
filePath = "model.pth" #没有路径,会保存到python文件所在目录
torch.save(model, filePath)
print('保存完成')
代码会输出loss的值,我们要重点关注这个值。 Loss 值越大,表示模型的预测与真实标签之间的差距较大,模型的性能较差。 Loss 值越小,表示模型的预测更接近真实标签,性能逐渐提高。 即,loss值接近0的时候,这个模型就可以用了.
编写使用module验证图片的py文件,注意要引用torch_test17_Model.py文件,代码如下:
import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn.functional as F
import torch_test17_Model as tm
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
batch_size = 100
transform = transforms.Compose(
[transforms.Resize((32, 32)),# 如果预测时处理的图片尺寸与训练时不同,如评估输入的图片尺寸为 [100, 3, 64, 64],而模型训练使用的尺寸是 [100, 3, 32, 32],可以用這個转换一下
transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
test_dataset = torchvision.datasets.CIFAR10(
root='./data', train=False, download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(
dataset=test_dataset, batch_size=batch_size, shuffle=False)
filePath = "model.pth" #没有路径,会保存到python文件所在目录
model = torch.load(filePath,weights_only=False)
model.eval() # 切换到评估模式
############################使用阈值判断######################################
threshold = 0.7 # 设定一个阈值,表示模型的信心度,用阈值判断的话,要求模型必须更精确,如果只是两轮的训练,会出现全部判定不过去的情况
with torch.no_grad():
for images, labels in test_loader:
print("############################判断######################################")
images = images.to(device)
labels = labels.to(device)
outputs = model(images)
print("outputs.shape",outputs.shape)
# 计算 softmax 概率
probabilities = F.softmax(outputs, dim=1)
max_probs, predicted = torch.max(probabilities, 1)
for i in range(len(predicted)):
if max_probs[i] < threshold: # 如果置信度低于阈值,认为是未知类别
print(f"图片 {i} 被认为是未知类别,置信度 {max_probs[i]:.4f}")
else:
print(f"图片 {i} 被认为是类别 {predicted[i]},置信度 {max_probs[i]:.4f}")
判断图片是什么的时候,使用阈值模式.
到此,我们对于神经网络,卷积神经网络,深度网络都有了一定了解。 然后我们就可以继续学习transformer了.
传送门: 零基础学习人工智能—Python—Pytorch学习—全集 。
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处! 。
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢! 。
https://www.cnblogs.com/kiba/p/18609581 。
最后此篇关于零基础学习人工智能—Python—Pytorch学习(十二)的文章就讲到这里了,如果你想了解更多关于零基础学习人工智能—Python—Pytorch学习(十二)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
上一篇:《人工智能模型训练中的数据之美——探索TFRecord》 序言:自然语言处理(NLP)是人工智能中的一种技术,专注于理解基于人类语言的内容。它包含了编程技术,用于创建可以理解语言、分类内
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这一年来,AI领域层出不穷的技术和应用,真的有点让人疲于奔命。其中AIGC领域的diffusion model 和 NLP领域的 ChatGBT 引领了这一轮风潮。AI取代越来越多脑力工作者的趋势已
人工智能,有多能? "AI"二字,相信大家并不陌生。但是,全力发展人工智能,真的合适吗? 六年前,小米发布了小爱同学。这大概是离大家最近的人工智能
我正在使用 Flash 中的 Box2D 实现一个简单的 Volley 游戏。我需要为 CPU 播放器实现一些 AI。我们就叫他 jack 吧。因此,Jack 需要预测球被人类球员 John 击中后会
我正在尝试查找有关尝试创建可以理解英语单词、语法和上下文的基本 AI 工具的信息(希望是 C# 源代码)。 想法是通过使用尽可能多的书面文档来训练 AI,然后基于这些文档,让 AI 用对人类有意义的正
我正在编写一个个人项目,该项目旨在拥有一个可以进化的类或对象,我们称之为“机器人”。机器人需要能够在给定命令的情况下创建类、字段和函数,并能够将逻辑写入这些对象以进行操作(但通常都是这样做的)。 为了
我正在做一个项目,其中有一系列要拍卖的卡片;出价最高的人将赢得拍卖中值(value)最高的卡片。 当 AI 玩家轮到时,他需要评估数组并确定他的出价估值。 忽略与验证或规则有关的任何事情;因为我已经对
假设我有 20 名玩家 [姓名 A .. T] 参加锦标赛。锦标赛的规则规定每个玩家与其他玩家对战两次 [A 对 B、B 对 A、A 对 C .. 等等]。有 20 名玩家,总共有 380 场比赛。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在开发一个应该像异或运算符一样工作的程序。 为了调整权重,我使用反向传播。 我还包括了深度学习(它几乎按其应有的方式工作,这里同样的斗争)但这不应该是出于重要性。 (当有像 这样的 if 子句时
是否有围绕 AI 的标准规则引擎/算法来预测用户对特定类型产品(如衣服)的品味。我知道这是所有电子商务网站都会为之扼杀的一件事。但我正在寻找在那里定义的理论模式,这将有助于以更好的方式做出预测,即使不
所以这是一项大学作业,除了 AI 不知道如何“取胜”之外,一切都已经完成,而且它在开始时的 Action 并不像我希望的那样随机走到顶角,然后往下走。该任务只需要 AI 的两条规则,即它可以“获胜”或
我认为 Online-Depth-Search Algorithm 存在一些问题,因为我没有看到任何递归调用。 这是来自 peter Norvig 的代码。 如果正确或错误,请帮助我理解这一点。 fu
这是 C 语言中的玩家与 AI 井字棋游戏。如果 AI 滚到一个被占用的位置,我该如何让它再次滚到一个未被占用的位置? char boardchar[3][3] = { {'1', '2', '3'}
我正在尝试为我的 connect 4 java 程序设计一个 AI,需要有不同级别的难度,我已经为简单级别创建了一个算法,但现在我需要另一个针对困难级别的算法。 有人可以推荐或给我一些伪代码来实现人工
我一直在尝试一些框架和算法,但我找不到一个可以做我想做的事情——根据值对数据列进行分类。 我尝试使用贝叶斯算法,但它不是很精确,因为我不能期望正在搜索的数据在训练集中 - 但我可以期望模式在训练中。
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我有两个类,人类和怪物。 两者都有一个名为 MoveBehavior 的属性 Human有HumanMoveBehavior,Monster有MonsterMoveBehavior 我希望 Human
我是一名优秀的程序员,十分优秀!