您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页(神经网络和卷积入门)Pytorch小土堆跟练代码(第10天)

(神经网络和卷积入门)Pytorch小土堆跟练代码(第10天)

来源:百家汽车网

本章将介绍pytorch中面向对象部分的许多基本写法和基本概念

为跟练小土堆每集代码,然后进李宏毅机器学习课程。

在系列中会敲完所有视频中代码,并且在注释详细写出感悟和易错点。

欢迎大家一起交流!

最前面的神经网络和卷积,可以移步我的

各个层的简介

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
'normalization是正则化,防止过拟合;regular是归一化,加速收敛,化成标准高斯分布'
'Recurrent Layers是在文字识别等里面常用的'
'Transformer Layers不怎么用'
'Linear Layers线性层in_features,out_features,bias。线性层的意思就是对输入数据进行y=kx+b的变化'
"Dropout,为了防止过拟合"
'sparse 是语言识别'
'Disdance误差是如何衡量的,Loss是大小为多少'

#Linear Layers
'in_features是输入的个数,由kx+b得到out_features,bias=True是加偏置,weight是k。这是最基本的神经网络'
#VGG经典模型

调用数据集

都是套路性的,每次都这么写

dataset = torchvision.datasets.CIFAR10("../data",train=True,transform=torchvision.transforms.ToTensor(),
                                       download=True)
dataloader = DataLoader(dataset,batch_size=)

 神经网络

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.linear1 = Linear(196608,10)

    def forward(self,input):
        output = self.linear1(input)
        return output

分析一下神经网络模板 ,尤其是super如何继承父类的

那么如何区分类、实例、调用方法的概念呢? 

在 Python 中,实例方法是面向对象编程的核心概念,它们各自有独特的作用和关系。以下是它们的具体含义和相互关系:

1. 类(Class)

  • 定义:类是对象的模板或蓝图。它定义了一类对象的属性方法

  • 作用:它描述了所有对象的共性,包括它们的数据和行为。

  • 语法:通过 class 关键字定义类。例如:

  • class Animal:
        species = "Mammal"  # 类属性
    
        def __init__(self, name):  # 实例属性初始化
            self.name = name
            
        def speak(self):
            print(f"{self.name} makes a sound.")
    

    在这个例子中,Animal 是一个类,定义了一个类属性 species 和一个方法 speak

2. 实例(Instance)

  • 定义:实例是根据类创建的具体对象。实例是类的“具体化”。

  • 作用:每个实例可以有自己的数据。通过实例可以访问类的属性和方法。

  • 语法:通过“调用”类来创建实例。例如:

    my_animal = Animal("Dog")  # my_animal 是类 Animal 的实例

    这里 my_animalAnimal 类的实例。

3. 方法(Method)

  • 定义:方法是类内部定义的函数,用于描述类的实例可以执行的操作。
  • 种类
    • 实例方法:定义时带有 self 参数,用于操作实例的属性或执行实例的动作。
    • 类方法:定义时带有 cls 参数(通常使用 @classmethod 装饰器),用于操作类属性。
    • 静态方法:定义时没有 selfcls 参数(通常使用 @staticmethod 装饰器),不依赖于类或实例的属性。

什么是调用一个实例方法?

  • 调用实例方法是指在实例对象上使用方法。实例方法通过 self 参数访问实例的属性。

  • 例如,调用 my_animal 实例的 speak 方法:

    my_animal.speak()  # 输出:Dog makes a sound.
    

    这里,speak 是一个实例方法,通过 my_animal 调用该方法时,self 就指向 my_animal 实例,使得方法可以访问和使用 my_animal 的属性 name

访问类的属性的方法

在 Python 中,有几种方式可以访问类的属性:

总结

  • 是模板,定义属性和方法。
  • 实例是类的具体对象,可以通过实例访问类的属性和调用类的方法。
  • 调用实例方法就是通过实例来执行定义在类中的函数。

 调用类的方法

for data in dataloader:
    imgs , targets = data
    # print(imgs.shape)     这里是为了看一下输入的格式是什么,[,3,32,32],我们想变成[1,1,1,数],自己算出来
    #output = torch.reshape(imgs,(1,1,1,-1))
    output = torch.flatten(imgs)     #小函数的用法,全展为一维,就一个参数。摊平,flat.这个比reshape方便。但是reshape可以转化为
    print(output.shape)
    output = tudui(output)
    print(output.shape)

属性和方法又有什么不同?

1. 属性(Attribute)

  • 定义:属性是用来存储对象的状态或数据的变量,可以理解为对象的“特征”。

  • 作用:属性用于描述对象的特征或状态。例如,人的年龄、名字、颜色等都可以作为属性。

  • 访问方式:通常直接通过对象来访问属性。

  • 属性常常是在__init__方法中定义的!

  • 示例

  • class Person:
        def __init__(self, name, age):
            self.name = name  # name 是属性
            self.age = age    # age 是属性
    
    person = Person("Alice", 30)
    print(person.name)  # 输出:Alice
    print(person.age)   # 输出:30
    
  • 在这个例子中,nameagePerson 类的属性,表示一个人的名字和年龄。

2. 方法(Method)

  • 定义:方法是定义在类中的函数,用来描述对象的行为或功能。

  • 作用:方法用于定义对象可以执行的动作或操作,通常会访问或修改对象的属性。

  • 访问方式:通过对象调用方法(需要加上 ()),这样可以对属性进行操作。

  • 示例

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def introduce(self):  # introduce 是一个方法
            print(f"My name is {self.name} and I am {self.age} years old.")
    
    person = Person("Alice", 30)
    person.introduce()  # 输出:My name is Alice and I am 30 years old.
    

    在这个例子中,introducePerson 类的一个方法,表示人的自我介绍行为。调用 person.introduce() 时,introduce 方法会访问 personnameage 属性。

区别总结

  • 属性是对象的数据或状态,表示“是什么”,如 nameage
  • 方法是对象的行为或功能,表示“能做什么”,如 introduce() 是一个自我介绍的方法。
  • 属性直接通过对象访问,而方法需要调用执行。
  • 点是属性,括号是方法

让我们看一下output = tudui(output)这句

在这里,output = tudui(output) 而不是 output = tudui(input),通常是因为程序中的数据正在不断地被更新处理。这个用法中的括号里的内容表示要传递给函数 tudui参数

让我们逐步分析这个写法的含义:

  1. 初始数据:在之前的代码中,output 可能已经被赋值为某个值或经过其他处理。也就是说,output 可能不再是初始的原始输入(例如,input),而是经过某些步骤后更新的数据。

  2. tudui(output):此处的 tudui 是一个函数,它接收 output 作为输入。执行 tudui(output) 会对 output 的当前值进行一些处理(例如,转换、计算等),然后返回一个新值。

  3. output = tudui(output):这个赋值语句的作用是用 tudui(output)结果来更新 output,即 output 的新值是 tudui(output) 返回的结果。这通常用于循环或迭代中,以便每次调用 tudui 时都在之前的 output 基础上进行进一步处理。

简单示例

例如,如果我们有如下代码:

output = 2

def tudui(x):
    return x * 2

output = tudui(output)  # 此时 output = 2 * 2 = 4
output = tudui(output)  # 此时 output = 4 * 2 = 8
output = tudui(output)  # 此时 output = 8 * 2 = 16

在这种情况下,output 每次都会被更新到 tudui(output) 的结果。这种用法在需要累积、迭代更新或递归计算时很常见。

明天会更新神经网络层的最后一章,然后进入实战训练集

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务