1.线性层
Linear — PyTorch 2.5 documentation
个人理解如下图(贴的可能不是那么好看):
下面是我的代码:
import torch
import torchvision.datasets
from sympy import ceiling
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
input_img_data = torchvision.datasets.CIFAR10(root="data",train=False,
transform=torchvision.transforms.ToTensor(),
download=True)
input_img =DataLoader(input_img_data,batch_size=64,drop_last=False)
#建立模型结构
class mymodel(nn.Module):
def __init__(self,in_feature,out_feature):
super(mymodel,self).__init__()
#in_features输入的中的元素个数,out_features输出元素的个数,bias为True则加入偏置b
#计算 y = x * A^t + b (A^t 线性代数中A矩阵的转置暂时只知道1维矩阵可以当input,其中input_feature就是这个一维矩阵中的元素个数)
self.linear = Linear(in_features=in_feature,out_features=out_feature)
def forward(self,x):
output = self.linear(x)
return output
waiter = SummaryWriter()
#变换格式
for data in input_img:
img,target = data
#转换为【1,1,1,xxx】
# img_change=torch.reshape(img,[1,1,1,-1])
img_change = torch.flatten(img)
print(img_change.shape)
in_feature = img_change.shape[0]
out_feature = ceiling(in_feature/196608 * 10) #向上取整
print(in_feature)#展平函数将多维降至一维
opencv = mymodel(in_feature,out_feature)
out_img = opencv(img_change)
print(out_img.shape)
下面这两行代码的效果差不多,都是为了将输入的图像展平,变成可以进行矩阵运算的一维矩阵,
#转换为【1,1,1,xxx】
# img_change=torch.reshape(img,[1,1,1,-1])
img_change = torch. Flatten(img)
下面的代码做了一点更改:
主要是防止,输入drop_last = False的情况下,最后一组的in_features不等于前几组的,如何稍微更改了一下
def __init__(self,in_feature,out_feature):
super(mymodel,self).__init__()
#in_features输入的中的元素个数,out_features输出元素的个数,bias为True则加入偏置b
#计算 y = x * A^t + b (A^t 线性代数中A矩阵的转置暂时只知道1维矩阵可以当input,其中input_feature就是这个一维矩阵中的元素个数)
self.linear = Linear(in_features=in_feature,out_features=out_feature)
下面就是对每一次的in_feature和out_feature进行更新:
对out_feature进行更改,取前面的196608:10的输出,最后一组按比例输出(向上取整模式)
in_feature = img_change.shape[0]
out_feature = ceiling(in_feature/196608 * 10) #向上取整
print(in_feature)#展平函数将多维降至一维
opencv = mymodel(in_feature,out_feature)
out_img = opencv(img_change)