小土堆学习笔记4(线形层)

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值