十七、完整神经网络模型训练步骤

以CIFAR-10数据集为例,训练自己搭建的神经网络模型架构

一、准备CIFAR-10数据集

CIFAR10官网使用文档
torchvision.datasets.CIFAR10(root="./CIFAR_10",train=True,download=True)

参数描述
root字符串,指明要下载到的位置,或已有数据集存放的位置
train若为True则下载训练集,若为False则下载册数集
transform一个函数/转换,它接收PIL图像并返回转换后的版本
target_transform接收目标并对其进行转换的函数/转换
download若为True则会从官网进行下载,若为False则不下载

详细的datasets使用可以参考该篇博文:五、torchvision
导包

import torchvision
from torch import nn
from torch.optim.lr_scheduler import ExponentialLR
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from beyond_model import *

创建python文件beyond_train.py

# CIFAR10是PIL的图片,通过transform转换为tensor类型图片
train_datasets = torchvision.datasets.CIFAR10("CIFAR_10",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_datasets = torchvision.datasets.CIFAR10("CIFAR_10",train=False,transform=torchvision.transforms.ToTensor(),download=True)#通过len方法获取数据集的大小
train_data_size = len(train_data)
test_data_size = len(test_data)# pycharm中 Ctrl+D进行复制一行操作
print("训练数据集的长度为:{}".format(train_data_size))# train_dataset_size is 50000
print("测试数据集的长度为:{}".format(test_data_size))# test_datasets_size is 10000

二、利用DataLoader进行加载CIFAR-10数据集

DataLoader官网使用手册
详细DataLoader看参考该篇博文:六、DataLoader

# 利用DataLoader加载CIFAR-10数据集
train_dataloader = DataLoader(dataset=train_datasets,batch_size=64)
test_dataloader = DataLoader(dataset=test_datasets,batch_size=64)

三、搭建神经网络架构

因为CIFAR-10数据集是10分类的数据集,故需要搭建一个10分类的网络架构

神经网络架构搭建的详细步骤可以参看该篇博文:二、复现网络模型训练CIFAR-10数据集

一般而言,神经网络模型都会另放在一个文件下
创建python文件beyond_model.py

# 搭建神经网络架构
import torch
from torch import nnclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.model = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(in_features=1024,out_features=64),nn.Linear(in_features=64,out_features=10))def forward(self,input):x = self.model(input)return xif __name__ == '__main__':beyond = Beyond()input = torch.zeros((64,3,32,32))#验证网络的正确性,输入一个(batchsize,channel,H,W)数据output = beyond(input)print(output.shape)#torch.Size([64, 10])  可以看出输出结果为十类,符合要求

四、创建网络模型

beyond_train.py文件中引入beyond_model.py中的模型

# 引用网络模型
beyond = Beyond()

五、创建损失函数

这里使用交叉熵损失函数,当然用其他的也都可以
损失函数的详细使用说明可以参考该篇博文:十三、Loss Functions

# 创建交叉熵损失函数
loss_fn = nn.CrossEntropyLoss()

六、定义优化器

这里使用随机梯度下降SGD优化器,设置自动学习速率,每轮的学习速率会乘以0.1,随着训练次数的增加,学习速率会变小
优化器的使用可以参考该篇博文:十四、OPTIM

# 创建随机梯度下降SGD优化器
learning_rate = 1e-1 #0.01
optimizer = torch.optim.SGD(params=beyond.parameters(),lr=learning_rate)
scheduler = ExponentialLR(optimizer=optimizer,gamma=0.1)#将学习率设置为自动优化

七、设置训练网络中的一下其他参数

# 设置训练网络中的其他参数
#训练次数
total_train_step = 0
#train_step_sum = 0
#测试次数
total_test_step = 0
#test_step_sum = 0
#要训练的轮数
epoch = 10# 添加tensorboard
writer = SummaryWriter("y_log")

八、开始训练、测试、保存模型


for i in range(epoch):print("-------------第{}轮训练开始-------------".format(i + 1))#训练步骤开始beyond.train()for data in train_dataloader:# 从train_dataloader中获取训练数据,图片和图片的真实标签imgs,targets = data# 将训练数据进行解析outputs = beyond(imgs)# 将解析之后的训练数据放入网络中,获得一个输出loss = loss_fn(outputs,targets)# 将模型输出结果和图片的真实标签通过交叉熵损失函数得到损失值# 利用优化器对损失函数进行优化optimizer.zero_grad()# 对所有参数的梯度进行清零loss.backward()# 将损失函数所计算的参数结点的梯度进行反向传播optimizer.step()# 开始提供优化器进行优化total_train_step = total_train_step + 1 # 记录训练次数if total_train_step % 100 == 0:# 每训练100张输出一次即可,不需要训练一张输出一次print("训练次数:{},Loss:{}".format(total_train_step, loss.item()))writer.add_scalar(tag="train_loss",scalar_value=loss.item(),global_step=total_train_step)scheduler.step()  # 这里就不能用优化器,而是使用自动学习速率的优化器# 测试步骤开始beyond.eval()total_test_loss = 0# 需要获取经过所有验证集之后的损失值进行累加即可total_accuracy = 0# 分类问题上常用准确率来进行衡量with torch.no_grad():#这里的代码都没有梯度,不需要调优for data in test_dataloader:imgs,targets = dataoutputs = beyond(imgs)loss = loss_fn(outputs,targets)total_test_loss = total_test_loss + loss.item()accuracy = (outputs.argmax(1) == targets).sum()total_accuracy = accuracy + total_accuracyprint("整体测试集上的Loss:{}".format(total_test_loss))print("整体测试集上的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar(tag="test_loss", scalar_value=total_test_loss, global_step=total_test_step)writer.add_scalar(tag="test_accuracy", scalar_value=(total_accuracy/test_data_size), global_step=total_test_step)total_test_step = total_test_step + 1# 每测试一次该变量加一torch.save(beyond,"./beyond/beyond_{}.pth".format(i))print("模型已保存")#torch.save(beyond.state_dict(),"./beyond/beyond_{}.pth".format(i))
writer.close()

九、完整代码(未使用GPU进行训练)

beyond_train.py

import torchvision
from torch import nn
from torch.optim.lr_scheduler import ExponentialLR
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from beyond_model import *train_data = torchvision.datasets.CIFAR10("CIFAR_10",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10("CIFAR_10",train=False,transform=torchvision.transforms.ToTensor(),download=True)#获取数据集的大小
train_data_size = len(train_data)
test_data_size = len(test_data)# pycharm中 Ctrl+D进行复制一行操作
print("训练数据集的长度为:{}".format(train_data_size))# train_dataset_size is 50000
print("测试数据集的长度为:{}".format(test_data_size))# test_datasets_size is 10000# 利用DataLoader加载CIFAR-10数据集
train_dataloader = DataLoader(dataset=train_data,batch_size=64)
test_dataloader = DataLoader(dataset=test_data,batch_size=64)# 引用网络模型
beyond = Beyond()# 创建交叉熵损失函数
loss_fn = nn.CrossEntropyLoss()# 创建随机梯度下降SGD优化器
learning_rate = 1e-1 #0.01
optimizer = torch.optim.SGD(params=beyond.parameters(),lr=learning_rate)
scheduler = ExponentialLR(optimizer=optimizer,gamma=0.1)#将学习率设置为自动优化# 设置训练网络中的其他参数
#训练次数
total_train_step = 0
#train_step_sum = 0
#测试次数
total_test_step = 0
#test_step_sum = 0
#要训练的轮数
epoch = 10# 添加tensorboard
writer = SummaryWriter("y_log")for i in range(epoch):print("-------------第{}轮训练开始-------------".format(i + 1))#训练步骤开始beyond.train()for data in train_dataloader:# 从train_dataloader中获取训练数据,图片和图片的真实标签imgs,targets = data# 将训练数据进行解析outputs = beyond(imgs)# 将解析之后的训练数据放入网络中,获得一个输出loss = loss_fn(outputs,targets)# 将模型输出结果和图片的真实标签通过交叉熵损失函数得到损失值# 利用优化器对损失函数进行优化optimizer.zero_grad()# 对所有参数的梯度进行清零loss.backward()# 将损失函数所计算的参数结点的梯度进行反向传播optimizer.step()# 开始提供优化器进行优化total_train_step = total_train_step + 1 # 记录训练次数if total_train_step % 100 == 0:# 每训练100张输出一次即可,不需要训练一张输出一次print("训练次数:{},Loss:{}".format(total_train_step, loss.item()))writer.add_scalar(tag="train_loss",scalar_value=loss.item(),global_step=total_train_step)scheduler.step()  # 这里就不能用优化器,而是使用自动学习速率的优化器# 测试步骤开始beyond.eval()total_test_loss = 0# 需要获取经过所有验证集之后的损失值进行累加即可total_accuracy = 0# 分类问题上常用准确率来进行衡量with torch.no_grad():#这里的代码都没有梯度,不需要调优for data in test_dataloader:imgs,targets = dataoutputs = beyond(imgs)loss = loss_fn(outputs,targets)total_test_loss = total_test_loss + loss.item()accuracy = (outputs.argmax(1) == targets).sum()total_accuracy = accuracy + total_accuracyprint("整体测试集上的Loss:{}".format(total_test_loss))print("整体测试集上的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar(tag="test_loss", scalar_value=total_test_loss, global_step=total_test_step)writer.add_scalar(tag="test_accuracy", scalar_value=(total_accuracy/test_data_size), global_step=total_test_step)total_test_step = total_test_step + 1# 每测试一次该变量加一torch.save(beyond,"./beyond/beyond_{}.pth".format(i))print("模型已保存")#torch.save(beyond.state_dict(),"./beyond/beyond_{}.pth".format(i))
writer.close()

beyond_model.py

# 搭建神经网络架构
import torch
from torch import nnclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.model = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(in_features=1024,out_features=64),nn.Linear(in_features=64,out_features=10))def forward(self,input):x = self.model(input)return xif __name__ == '__main__':beyond = Beyond()input = torch.zeros((64,3,32,32))#输入64张图片,3通道,大小为(32,32)output = beyond(input)print(output.shape)#torch.Size([64, 10])  返回64张照片,每个图片中有10个数据代表这十分类任务的概率值

在Terminal下运行tensorboard --logdir=y_log --port=7870,logdir为打开事件文件的路径,port为指定端口打开;
通过指定端口2312进行打开tensorboard,若不设置port参数,默认通过6006端口进行打开。

在这里插入图片描述
在这里插入图片描述

十、使用GPU训练网络

方法一:cuda()

网络模型、损失函数、训练数据、测试数据调用cuda方法

①网络模型

# 引用网络模型
beyond = Beyond()
if torch.cuda.is_available():beyond = beyond.cuda()

②损失函数

# 创建交叉熵损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():loss_fn = loss_fn.cuda()

③训练数据

    for data in train_dataloader:# 从train_dataloader中获取训练数据,图片和图片的真实标签imgs,targets = data# 将训练数据进行解析if torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()

④测试数据

    with torch.no_grad():#这里的代码都没有梯度,不需要调优for data in test_dataloader:imgs,targets = dataif torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()

完整代码如下:

import torch
import torchvision
from torch import nn
from torch.optim.lr_scheduler import ExponentialLR
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import timeclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.model = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=32,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size=(5,5),stride=1,padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(in_features=1024,out_features=64),nn.Linear(in_features=64,out_features=10))def forward(self,input):x = self.model(input)return xtrain_data = torchvision.datasets.CIFAR10("CIFAR_10",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10("CIFAR_10",train=False,transform=torchvision.transforms.ToTensor(),download=True)#获取数据集的大小
train_data_size = len(train_data)
test_data_size = len(test_data)# pycharm中 Ctrl+D进行复制一行操作
print("训练数据集的长度为:{}".format(train_data_size))# train_dataset_size is 50000
print("测试数据集的长度为:{}".format(test_data_size))# test_datasets_size is 10000# 利用DataLoader加载CIFAR-10数据集
train_dataloader = DataLoader(dataset=train_data,batch_size=64)
test_dataloader = DataLoader(dataset=test_data,batch_size=64)# 引用网络模型
beyond = Beyond()
if torch.cuda.is_available():beyond = beyond.cuda()
# 创建交叉熵损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():loss_fn = loss_fn.cuda()# 创建随机梯度下降SGD优化器
learning_rate = 1e-1 #0.01
optimizer = torch.optim.SGD(params=beyond.parameters(),lr=learning_rate)
scheduler = ExponentialLR(optimizer=optimizer,gamma=0.1)#将学习率设置为自动优化# 设置训练网络中的其他参数
#训练次数
total_train_step = 0
#train_step_sum = 0
#测试次数
total_test_step = 0
#test_step_sum = 0
#要训练的轮数
epoch = 10# 添加tensorboard
writer = SummaryWriter("y_log")start_time = time.time()#记录训练开始时的时间
for i in range(epoch):print("-------------第{}轮训练开始-------------".format(i + 1))#训练步骤开始beyond.train()for data in train_dataloader:# 从train_dataloader中获取训练数据,图片和图片的真实标签imgs,targets = data# 将训练数据进行解析if torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()outputs = beyond(imgs)# 将解析之后的训练数据放入网络中,获得一个输出loss = loss_fn(outputs,targets)# 将模型输出结果和图片的真实标签通过交叉熵损失函数得到损失值# 利用优化器对损失函数进行优化optimizer.zero_grad()# 对所有参数的梯度进行清零loss.backward()# 将损失函数所计算的参数结点的梯度进行反向传播optimizer.step()# 开始提供优化器进行优化total_train_step = total_train_step + 1 # 记录训练次数if total_train_step % 100 == 0:# 每训练100张输出一次即可,不需要训练一张输出一次end_tiem = time.time()#记录训练100次所使用的时间print("训练100次所使用的时间为:{}".format(end_tiem-start_time))#看下训练100次所用时间为多少print("训练次数:{},Loss:{}".format(total_train_step, loss.item()))writer.add_scalar(tag="train_loss",scalar_value=loss.item(),global_step=total_train_step)scheduler.step()  # 这里就不能用优化器,而是使用自动学习速率的优化器# 测试步骤开始beyond.eval()total_test_loss = 0# 需要获取经过所有验证集之后的损失值进行累加即可total_accuracy = 0# 分类问题上常用准确率来进行衡量with torch.no_grad():#这里的代码都没有梯度,不需要调优for data in test_dataloader:imgs,targets = dataif torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()outputs = beyond(imgs)loss = loss_fn(outputs,targets)total_test_loss = total_test_loss + loss.item()accuracy = (outputs.argmax(1) == targets).sum()total_accuracy = accuracy + total_accuracyprint("整体测试集上的Loss:{}".format(total_test_loss))print("整体测试集上的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar(tag="test_loss", scalar_value=total_test_loss, global_step=total_test_step)writer.add_scalar(tag="test_accuracy", scalar_value=(total_accuracy/test_data_size), global_step=total_test_step)total_test_step = total_test_step + 1# 每测试一次该变量加一torch.save(beyond,"./beyond/beyond_{}.pth".format(i))print("模型已保存")#torch.save(beyond.state_dict(),"./beyond/beyond_{}.pth".format(i))
writer.close()

方法二:to()

定义训练的设备,在网络模型、损失函数、训练数据、测试数据调用即可

①定义训练设备

#定义设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
#device = torch.device("cpu")#CPU
#device = torch.device("cuda")#GPU
#device = torch.device("cuda:0")#GPU 指定GPU训练  与上面是等价的

②网络模型

# 引用网络模型
beyond = Beyond()
beyond = beyond.to(device)

③损失函数

# 创建交叉熵损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.to(device)

④训练数据

    for data in train_dataloader:# 从train_dataloader中获取训练数据,图片和图片的真实标签imgs,targets = data# 将训练数据进行解析imgs = imgs.to(device)targets = targets.to(device)

⑤测试数据

    with torch.no_grad():#这里的代码都没有梯度,不需要调优for data in test_dataloader:imgs,targets = dataimgs = imgs.to(device)targets = targets.to(device)

补充

①item()

item()就是只获取数值,不获取该变量的类型

import torcha = torch.tensor(7870)
print(a)#tensor(7870)
print(a.item())#7870

②argmax(dim=Optional[int])

在分类问题上常用准确率来进行衡量
因为是有监督学习的十分类任务模型,最后的预测输出是十个值,且这十个值代表十个类别,且这些值的大小代表所对应的类别的可能性,而argmax方法则可以求出十个类别中可能性最大的那个类别对应的下标
output.argmax(dim=1),参数为1代表横向为一组求最大值;反之dim=0,则表示纵向为一组求最大值

import torchoutput = torch.tensor([[0.1,0.5,0.8],[0.5,0.1,0.4],[0.6,0.9,0.1]])out_x = output.argmax(dim=1)
print(out_x)#tensor([2, 0, 1])
# out_y = output.argmax(dim=0)
# print(out_y)#tensor([2, 2, 0])#假设这里以x为例
predicate = out_xtarget = torch.tensor([2,1,1])print(predicate == target)#tensor([ True, False,  True])print((predicate == target).sum())#tensor(2)  对应位置相等的个数为2个

接下来解释下代码含义
在这里插入图片描述

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

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

相关文章

μC/OS-Ⅱ 操作系统内核知识

目录μC/OS-Ⅱ任务调度1.任务控制块2.任务管理3.任务状态μC/OS-Ⅱ时间管理μC/OS-Ⅱ内存管理内存控制块MCBμC/OS-Ⅱ任务通信1.事件2.事件控制块ECB3.信号量4.邮箱5.消息队列操作系统内核:在多任务系统中,提供任务调度与切换、中断服务 操作系统内核为每…

第二版tapout

先说说上次流回来的芯片的测试情况。 4月23日, 芯片采用裸片直接切片, bond在板子上,外面加了一个小塑料壳来保护,我们就直接拿回来测试了。 测试的主要分为模拟和数字两部分, 数字部分的模块基本都工作正常&#xff0…

cd-rom门锁定什么意思_CD-ROM的完整形式是什么?

cd-rom门锁定什么意思CD-ROM:光盘只读存储器 (CD-ROM: Compact Disc Read-Only Memory) CD-ROM is an abbreviation of "Compact Disc Read-Only Memory". It is a data storage memory in the form of an optical compact disc, which is read by a syst…

远程工作时的协作工具

远程工作时的协作工具 Google Hangout 用于日常会议和面对面交谈,在国内其实可以用qq来带起。Campfire 用于一天来的持续对话。Screenhero 用于分享屏幕,一起写代码,这个比较有用,可以一起写代码。Balsamiq 用于计划要制作的 UI。Asana 用于管理任务Google Docs 用于…

十八、完整神经网络模型验证步骤

网络训练好了,需要提供输入进行验证网络模型训练的效果 一、加载测试数据 创建python测试文件,beyond_test.py 保存在dataset文件夹下a文件夹里的1.jpg小狗图片 二、读取测试图片,重新设置模型所规定的大小(32,32),并转为tens…

二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)

目录二分法细节1、leetcode 34 在排序数组中查找元素的第一个和最后一个位置2、不完全有序下的二分查找(leetcode33. 搜索旋转排序数组)3、含重复元素的不完全有序下的二分查找(81. 搜索旋转排序数组 II)3、不完全有序下的找最小元素(153. 寻找旋转排序数组中的最小值)4、二维矩…

ID3D11DeviceContext::Dispatch与numthread笔记

假定——[numthreads(TX, TY, TZ)] // 线程组尺寸。既线程组内有多少个线程。Dispatch(GX, GY, GZ); // 线程组的数量。既有多少个线程组。 那么——SV_GroupThreadID{iTX, iTY, iTZ} // 【线程组内的】线程3D编号SV_GroupID{iGX, iGY, iGZ} // 线程组的3D编号SV_DispatchT…

kotlin 查找id_Kotlin程序查找Square区域

kotlin 查找idFormula to find area of Square: area side*side 查找Square面积的公式: area side * side Given the value of side, we have to find the area of Square. 给定side的值,我们必须找到Square的面积。 Example: 例: Input…

小米手环6解决天气未同步问题

最近我发现了我的米6手环天气不同步,打开Zepp Life刷新同步也不行,后来我找了一些网上的解决方法,尝试了一些也还不行,我这人喜欢瞎捣鼓,无意之间给整好了,后来我开始总结自己操作步骤,就在刚才…

c# datetime._C#| DateTime.Month属性与示例

c# datetime.DateTime.Month属性 (DateTime.Month Property) DateTime.Month Property is used to get the month component of this object. Its a GET property of DateTime class. DateTime.Month属性用于获取此对象的月份组成部分。 这是DateTime类的GET属性。 Syntax: 句…

C++ 内存分配层次以及memory primitives的基本用法

分配层次 C memory primitives 分配释放类型是否可重载mallocfree()C函数不可newdeleteC表达式不可::operator new()::operator delete()C函数可allocator::allocate()allocator::deallocate()C标准库可自由设计并以之搭配任何容器 分配与释放的四个用法 1、malloc and delet…

jQuery easyui layout布局自适应浏览器大小

首先解释一下标题的含义,当我们用jQuery easyui layout 进行布局的时候,可能会遇到这样一个问题,那就是当手工调整浏览器大小,或者最大化、还原窗口的时候,layout的某个区域不能填充因为浏览器扩大而产 生的空白区域&a…

JAVA 作业:图形界面

自己动手写的一个小JAVA 程序: 一个学生管理小系统,虽然很挫,但是这我学JAVA的第一步。学了2天JAVA没有白费! 1 import java.awt.*;2 import java.awt.event.*;3 import java.util.ArrayList;4 5 import javax.swing.*;6 7 class …

一、Pytorch对自定义表达式自动求导

例如:y ax bx c,分别对a,b,c求导 若当a3,b4,c5,x1时 import torch from torch import autogradx torch.tensor(1.) a torch.tensor(3.,requires_gradTrue) b torch.tensor(4.,requires…

css菜单下拉菜单_在CSS中创建下拉菜单

css菜单下拉菜单CSS | 创建下拉菜单 (CSS | Creating Dropdown) Trivia: 琐事: We know the importance of navigation bar on our webpage, we know the importance of a list of items too on our webpage but what is the importance of dropdown in web pages?…

C++ 内存基本构件new/delete的意义、运用方式以及重载方式

目录一、对new的理解1、new做了什么2、new被编译器转为了什么3、operate_new源代码长啥样二、对delete的理解1、delete做了什么2、delete被编译器转为了什么3、operator delete源代码长啥样三、构造函数与析构函数的直接调用参考一、对new的理解 1、new做了什么 C告诉我们&am…

二、线性代数

一、张量 张量表示由一个数值组成的数组,这个数组可能有多个维度 import torchx torch.arange(15) x # tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])1,shape shape属性可以访问张量的形状 x.shape # torch.Size([15])2&a…

Wordpress prettyPhoto插件跨站脚本漏洞

漏洞名称:Wordpress prettyPhoto插件跨站脚本漏洞CNNVD编号:CNNVD-201311-413发布时间:2013-11-28更新时间:2013-11-28危害等级: 漏洞类型:跨站脚本威胁类型:远程CVE编号: 漏洞来源…

JavaScript学习笔记1

Netscape 公司 DOM模型&#xff0c;层(layer)-用ID标识。 HTML标记页面上的元素&#xff0c; <div id "mydiv">This is my div</div> CSS为这个页面元素定位 #mydiv{ position:absolute; left:320px; top:110px; } JavaScript 访问 (DOM模块不同&#x…

c# 中关键字_C#中的“使用”关键字

c# 中关键字Prerequisite: Namespace in C# 先决条件&#xff1a; C&#xff03;中的命名空间 If you want to include namespace in a program then we need to use using keyword. For example we use Console class which is defined in System namespace that’s why we n…