导包import torch import pandas as pd import torch.nn as nnclass Mymodelinitdef __init__(self, num_cls): super(myModel, self).__init__() self.conv1 nn.Conv2d(3, 64, 11, 4, 2) self.pool1 nn.MaxPool2d(3, 2) self.conv2 nn.Conv2d(64, 192, 5, 1, 2) self.pool2 nn.MaxPool2d(3, 2) self.conv3 nn.Conv2d(192, 384, 3, 1, 1) self.conv4 nn.Conv2d(384, 256, 3, 1, 1) self.conv5 nn.Conv2d(256, 256, 3, 1, 1) self.pool3 nn.MaxPool2d(3, 2) self.pool4 nn.AdaptiveAvgPool2d(6) self.fc1 nn.Linear(9216, 4096) self.fc2 nn.Linear(4096, 4096) self.fc3 nn.Linear(4096, num_cls)forwarddef forward(self, x): x self.conv1(x) x self.pool1(x) x self.conv2(x) x self.pool2(x) x self.conv3(x) x self.conv4(x) x self.conv5(x) x self.pool3(x) x self.pool4(x) x x.view(x.size()[0], -1) x self.fc1(x) x self.fc2(x) x self.fc3(x) return xx x.view(x.size()[0], -1)这是什么语法这是PyTorch 中改变张量形状的语法用来展平flatten多维张量x.size() # 返回张量形状的元组如torch.Size([4, 256, 6, 6])x.size()[0] # 取第一个维度即 batch_size这里是4view()方法用于重新组织张量的形状类似NumPy的reshape不改变数据内容只改变视图参数是新形状的各个维度1的特殊含义表示自动计算这个维度的大小PyTorch会根据总元素数和指定的其他维度自动推算x x.view(x.size()[0], -1)的作用保持批次维度不变x.size()[0]展平其他所有维度-1从4D卷积特征变成2D全连接输入这是连接卷积层和全连接层的标准转换步骤是深度学习中的常见操作原始形状[4, 256, 6, 6]总数据量 4 × 256 × 6 × 6 36,864 个数字展平后[4, 9216]总数据量 4 × 9216 36,864 个数字主函数model myModel(1000) data torch.ones(4, 3, 224, 224) pred model(data)# 第1行创建模型实例myModel(1000)中的 1000表示模型最后一层全连接层fc3的输出维度即模型预测的类别数量。model myModel(1000) # 1000表示有1000个输出类别# 第2行创建模拟输入数据data torch.ones(4, 3, 224, 224) # 创建一个形状为[4,3,224,224]的张量# 第3行前向传播推理pred model(data) # 将数据输入模型得到预测结果原始特征图┌─────────────────────────────┐│ 批次1: 256×6×6 ││ 批次2: 256×6×6 │ → 形状[4, 256, 6, 6]│ 批次3: 256×6×6 ││ 批次4: 256×6×6 │└─────────────────────────────┘展平后┌─────────────────────────────┐│ 批次1: 9216个特征 ││ 批次2: 9216个特征 │ → 形状[4, 9216]│ 批次3: 9216个特征 ││ 批次4: 9216个特征 │└─────────────────────────────┘model myModel(1000) # 创建模型告诉它“你要输出1000个分数”data torch.ones(4, 3, 224, 224) # 4张图片pred model(data) # 让模型看看这4张图是什么这三行是神经网络的标准测试流程创建模型 → 准备输入 → 获取输出。
卷积神经网络零基础-Alexnet网络
导包import torch import pandas as pd import torch.nn as nnclass Mymodelinitdef __init__(self, num_cls): super(myModel, self).__init__() self.conv1 nn.Conv2d(3, 64, 11, 4, 2) self.pool1 nn.MaxPool2d(3, 2) self.conv2 nn.Conv2d(64, 192, 5, 1, 2) self.pool2 nn.MaxPool2d(3, 2) self.conv3 nn.Conv2d(192, 384, 3, 1, 1) self.conv4 nn.Conv2d(384, 256, 3, 1, 1) self.conv5 nn.Conv2d(256, 256, 3, 1, 1) self.pool3 nn.MaxPool2d(3, 2) self.pool4 nn.AdaptiveAvgPool2d(6) self.fc1 nn.Linear(9216, 4096) self.fc2 nn.Linear(4096, 4096) self.fc3 nn.Linear(4096, num_cls)forwarddef forward(self, x): x self.conv1(x) x self.pool1(x) x self.conv2(x) x self.pool2(x) x self.conv3(x) x self.conv4(x) x self.conv5(x) x self.pool3(x) x self.pool4(x) x x.view(x.size()[0], -1) x self.fc1(x) x self.fc2(x) x self.fc3(x) return xx x.view(x.size()[0], -1)这是什么语法这是PyTorch 中改变张量形状的语法用来展平flatten多维张量x.size() # 返回张量形状的元组如torch.Size([4, 256, 6, 6])x.size()[0] # 取第一个维度即 batch_size这里是4view()方法用于重新组织张量的形状类似NumPy的reshape不改变数据内容只改变视图参数是新形状的各个维度1的特殊含义表示自动计算这个维度的大小PyTorch会根据总元素数和指定的其他维度自动推算x x.view(x.size()[0], -1)的作用保持批次维度不变x.size()[0]展平其他所有维度-1从4D卷积特征变成2D全连接输入这是连接卷积层和全连接层的标准转换步骤是深度学习中的常见操作原始形状[4, 256, 6, 6]总数据量 4 × 256 × 6 × 6 36,864 个数字展平后[4, 9216]总数据量 4 × 9216 36,864 个数字主函数model myModel(1000) data torch.ones(4, 3, 224, 224) pred model(data)# 第1行创建模型实例myModel(1000)中的 1000表示模型最后一层全连接层fc3的输出维度即模型预测的类别数量。model myModel(1000) # 1000表示有1000个输出类别# 第2行创建模拟输入数据data torch.ones(4, 3, 224, 224) # 创建一个形状为[4,3,224,224]的张量# 第3行前向传播推理pred model(data) # 将数据输入模型得到预测结果原始特征图┌─────────────────────────────┐│ 批次1: 256×6×6 ││ 批次2: 256×6×6 │ → 形状[4, 256, 6, 6]│ 批次3: 256×6×6 ││ 批次4: 256×6×6 │└─────────────────────────────┘展平后┌─────────────────────────────┐│ 批次1: 9216个特征 ││ 批次2: 9216个特征 │ → 形状[4, 9216]│ 批次3: 9216个特征 ││ 批次4: 9216个特征 │└─────────────────────────────┘model myModel(1000) # 创建模型告诉它“你要输出1000个分数”data torch.ones(4, 3, 224, 224) # 4张图片pred model(data) # 让模型看看这4张图是什么这三行是神经网络的标准测试流程创建模型 → 准备输入 → 获取输出。