当前位置: 首页 > news >正文

绥化市建设工程网站招投标推广公司产品文案该怎么写

绥化市建设工程网站招投标,推广公司产品文案该怎么写,建筑网站 法人签字,商业网站排名会搭建深度学习环境和依赖包安装 使用Anaconda创建环境、在pytorch官网安装pytorch、安装依赖包 会使用常见操作,例如matmul,sigmoid,softmax,relu,linear matmul操作见文章torch.matmul()的用法 sigmoid&#xff0…

会搭建深度学习环境和依赖包安装

使用Anaconda创建环境、在pytorch官网安装pytorch、安装依赖包

会使用常见操作,例如matmulsigmoidsoftmaxrelulinear

matmul操作见文章torch.matmul()的用法
sigmoidsoftmaxrelu都是常用的激活函数,linear是线性层:

from torch import nnclass Network(nn.Module):def __init__(self):super().__init__()self.model = nn.Sequential(nn.Sigmoid(),nn.Softmax(),nn.ReLU(),nn.Linear(1024, 64))

datasetdataloader,损失函数,优化器的使用

datasetdataloader

官方文档是这么写的:
在这里插入图片描述
当我们自定义一个dataset的时候,需要继承Dataset,重写__getitem__()方法,也可以重写__len__()方法,下面是一个例子,我们的数据集存放成这种形式,每一个image图片都对应一个相同名称的label文件,如0013035.jpg0013035.txt就分别是一个图片和它的label
在这里插入图片描述

import torchvision.transforms
from PIL import Image
from torch.utils.data import Dataset, DataLoaderclass MyData(Dataset):def __init__(self, root_dir, image_dir, label_dir):self.root_dir = root_dirself.image_dir = image_dirself.label_dir = label_dirself.image_path = os.path.join(self.root_dir, self.image_dir)self.label_path = os.path.join(self.root_dir, self.label_dir)self.imgs = os.listdir(self.image_path)self.labels = os.listdir(self.label_path)def __getitem__(self, item):img_name = self.imgs[item]img_item_path = os.path.join(self.image_path, img_name)label_item_path = os.path.join(self.label_path, self.convert_to_txt_path(img_name))img = Image.open(img_item_path)with open(label_item_path, 'r') as f:label = f.read().strip()return img, labeldef convert_to_txt_path(self, image_path):# 使用正则表达式匹配文件名中的点和扩展名,并替换为'.txt'label_path = re.sub(r'\.[^.]+?$', '.txt', image_path)return label_pathdef __len__(self):return len(self.imgs)root_dir = "dataset/train"
ants_image_dir = "ants_image"
bees_image_dir = "bees_image"
ants_label_dir = "ants_label"
bees_label_dir = "bees_label"
ants_dataset = MyData(root_dir, ants_image_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_image_dir, bees_label_dir)train_dataset = ants_dataset + bees_datasetimg, target = train_dataset[0]
transform = torchvision.transforms.ToTensor()
print(transform(img).shape)
print(target)

我们使用dataloader来读取这个数据集,我们需要对jpg格式的dataset进行处理,将其转换为相同大小的tensor,再读取:

import torchvision.transforms
from PIL import Image
from torch.utils.data import Dataset, DataLoaderclass MyData(Dataset):def __init__(self, root_dir, image_dir, label_dir):self.root_dir = root_dirself.image_dir = image_dirself.label_dir = label_dirself.image_path = os.path.join(self.root_dir, self.image_dir)self.label_path = os.path.join(self.root_dir, self.label_dir)self.imgs = os.listdir(self.image_path)self.labels = os.listdir(self.label_path)def __getitem__(self, item):img_name = self.imgs[item]img_item_path = os.path.join(self.image_path, img_name)label_item_path = os.path.join(self.label_path, self.convert_to_txt_path(img_name))img = Image.open(img_item_path)transcompose = torchvision.transforms.Compose([torchvision.transforms.Resize((300, 300)), torchvision.transforms.ToTensor()])img = transcompose(img)with open(label_item_path, 'r') as f:label = f.read().strip()return img, labeldef convert_to_txt_path(self, image_path):# 使用正则表达式匹配文件名中的点和扩展名,并替换为'.txt'label_path = re.sub(r'\.[^.]+?$', '.txt', image_path)return label_pathdef __len__(self):return len(self.imgs)root_dir = "dataset/train"
ants_image_dir = "ants_image"
bees_image_dir = "bees_image"
ants_label_dir = "ants_label"
bees_label_dir = "bees_label"
ants_dataset = MyData(root_dir, ants_image_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_image_dir, bees_label_dir)train_dataset = ants_dataset + bees_datasetimg, target = train_dataset[0]
print(img.shape)
print(target)train_dataloader = DataLoader(train_dataset, batch_size=64, drop_last=True)
for data in train_dataloader:try:imgs, target = dataexcept Exception as e:print(f"跳过异常文件:  {e}")

使用公开数据集的示例如下:

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 准备的测试数据集
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())test_loader = DataLoader(test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)writer = SummaryWriter("dataloader")
for epoch in range(2):step = 0for data in test_loader:imgs, targets = data# print(imgs.shape)# print(targets)writer.add_images("Epoch: {}".format(epoch), imgs, step)step = step + 1writer.close()

损失函数

Loss的用法实际上就两行代码的事情,以下是示例:

import torch
from torch.nn import L1Loss, MSELoss
from torch import nninputs = torch.tensor([1, 2, 3], dtype=torch.float)
targets = torch.tensor([1, 2, 5], dtype=torch.float)inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))loss = L1Loss(reduction='sum')
result = loss(inputs, targets)loss_mse = MSELoss()
result_mse = loss_mse(inputs, targets)print(result)
print(result_mse)x = torch.tensor([0.1, 0.2, 0.3])
y = torch.tensor([1])
x = torch.reshape(x, (1, 3))
loss_cross = nn.CrossEntropyLoss()
result_cross = loss_cross(x, y)
print(result_cross)

优化器

优化器的使用也很简单,但要注意,在每一步训练之前都需要用optim.zero_grad()将梯度置零,避免梯度累加造成问题,用loss.backward()得到梯度以后用optim.step()更新参数

import torch
import torchvision.datasets
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset, batch_size=1)class Network(nn.Module):def __init__(self):super().__init__()self.model1 = Sequential(Conv2d(3, 32,5, padding=2),MaxPool2d(2),Conv2d(32, 32,5, padding=2),MaxPool2d(2),Conv2d(32, 64,5,padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64,10))def forward(self, x):x = self.model1(x)return xloss = nn.CrossEntropyLoss()
network = Network()
optim = torch.optim.SGD(network.parameters(), lr=0.01)for epoch in range(20):running_loss = 0.0for data in dataloader:imgs, targets = dataoutputs = network(imgs)result_loss = loss(outputs, targets)optim.zero_grad()result_loss.backward()optim.step()running_loss = running_loss + result_lossprint(running_loss)

gpu手写和预测一个模型

gpu写模型

这里采用to(device)的方式使用gpu,对模型、损失函数和读数据部分使用to(device)调用gpu,其他和cpu并无区别:

import torch
import torchvision.datasets
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import time
# from model import *# 定义训练的设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 准备数据集
train_data = torchvision.datasets.CIFAR10("./dataset", train=True, transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True)# length
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练数据集的长度为: {}".format(train_data_size))
print(f"测试数据集的长度为: {test_data_size}")# 利用 DataLoader 来加载数据集
train_dataloader = DataLoader(train_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)# 创建网络模型
# 搭建神经网络
class Network(nn.Module):def __init__(self):super().__init__()self.model = nn.Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4, 64),nn.Linear(64, 10))def forward(self, x):x = self.model(x)return xnetwork = Network()
network.to(device)# 损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn.to(device)# 优化器
# learning_rate = 0.01
learning_rate = 1e-2
optimizer = torch.optim.SGD(network.parameters(), lr=learning_rate)# 设置训练网络的一些参数
# 记录训练的次数
total_train_step = 0
# 记录测试的次数
total_test_step = 0
# 训练的轮数
epoch = 30# 添加tensorboard
writer = SummaryWriter("logs_train")
start_time = time.time()
for i in range(epoch):print("-----------第 {} 轮训练开始----------".format(i+1))# 训练步骤开始network.train()for data in train_dataloader:imgs, targets = dataimgs = imgs.to(device)targets = targets.to(device)outputs = network(imgs)loss = loss_fn(outputs, targets)# 优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step = total_train_step + 1if total_train_step % 100 == 0:end_time = time.time()print(end_time - start_time)print("训练次数: {}, loss: {}".format(total_train_step, loss.item()))writer.add_scalar("train_loss", loss.item(), total_train_step)# 测试步骤开始network.eval()total_test_loss = 0total_accuracy = 0with torch.no_grad():for data in test_dataloader:imgs, targets = dataimgs = imgs.to(device)targets = targets.to(device)outputs = network(imgs)loss = loss_fn(outputs, targets)total_test_loss = total_test_loss + lossaccuracy = (outputs.argmax(1) == targets).sum()total_accuracy = total_accuracy + accuracyprint("整体测试集上的Loss: {}".format(total_test_loss))print("整体测试集上的正确率: {}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)total_test_step = total_test_step + 1torch.save(network, "network_{}.pth".format(i))print("模型已保存")writer.close()

gpu预测模型

把读取到的模型和数据用to(device)设置成gpu运行

import torch
import torchvision.transforms
from PIL import Image
from torch import nn# 定义训练的设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
img_path = "dog.png"
image = Image.open(img_path)
print(image)transform = torchvision.transforms.Compose([torchvision.transforms.Resize((32, 32)),torchvision.transforms.ToTensor()])
image = transform(image)
print(image.shape)# 搭建神经网络
class Network(nn.Module):def __init__(self):super().__init__()self.model = nn.Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4, 64),nn.Linear(64, 10))def forward(self, x):x = self.model(x)return xmodel = torch.load("network_29.pth").to(device)
print(model)
image = torch.reshape(image, (1, 3, 32, 32))
image = image.to(device)
model.eval()
with torch.no_grad():output = model(image)
print(output)print(output.argmax(1))
http://www.yayakq.cn/news/283253/

相关文章:

  • 官方网站下载免费app网站建设与管理专业工资高吗
  • 设计师网站登录岳阳建设商城网站公司
  • 把自己做的网站传到网上新公司网站建设要求
  • 深圳积分商城网站设计最美情侣免费观看视频在线
  • 永久打开本网站的wordpress notfound
  • 长沙网站制作案例建筑工程招投标网站
  • 室内设计网站资源网站备案初审时间
  • 外贸网站设计航达建设网站
  • 免费网站制作平台推荐卖手表的网站
  • wordpress建的大型网站吗自己开设计工作室
  • 网站建设的描述网站开发涉及内容
  • 建设部网站统计西安网站托管专业公司
  • 做婚恋网站的思路运营一个网站的成本
  • 营销型网站图片国家世界新闻
  • 大连做外贸建站的专业公司ios微信上的pdf乱码
  • 高性能网站建设指南 京东新开传奇网站刚开一秒第一区
  • 东莞市建设工程检测中心网站重庆公司注册网站
  • 建设网站要多少费用网站规划的原则有哪些
  • 建站技术布局方式重庆城乡规划和建设局网站
  • 电脑哪里做模板下载网站个人小公司怎么注册
  • 东莞腾宇科技网站建设网站如何在百度
  • 马鞍山网站制作公司刷移动关键词优化
  • 工信部网站备案查询步骤详解驻马店做网站建设的公司
  • 机关网站建设引导语做网站前端的软件
  • 专门做mod的网站西部域名网
  • 大连建站系统模板大蒜做营销型网站
  • 此网站不支持下载视频怎么办沈阳制作网站
  • 淘宝客自己做网站深州市住房保障和城乡建设局网站
  • 网站制作语言学建设网站
  • 网站底部版权信息模板电子商务公司