深度之眼【Pytorch】--Module、Sequential容器(附Keras的Sequential)

本文主要为深度之眼pytorch训练营二期学习笔记,详细课程内容移步:深度之眼 https://ai.deepshare.net/index

目录

nn.Module

容器

Sequential

ModuleList

ModuleDict

总结

Keras-LeNet


nn.Module

 

 

 

容器

Sequential

import torch
import torchvision
import torch.nn as nn
from collections import OrderedDict

class LeNetSequential(nn.Module):
    def __init__(self, classes):
        super(LeNetSequential, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 6, 5),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(6, 16, 5),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),)

        self.classifier = nn.Sequential(
            nn.Linear(16*5*5, 120),
            nn.ReLU(),
            nn.Linear(120, 84),
            nn.ReLU(),
            nn.Linear(84, classes),)

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size()[0], -1)
        x = self.classifier(x)
        return x


class LeNetSequentialOrderDict(nn.Module):
    def __init__(self, classes):
        super(LeNetSequentialOrderDict, self).__init__()

        self.features = nn.Sequential(OrderedDict({
            'conv1': nn.Conv2d(3, 6, 5),
            'relu1': nn.ReLU(inplace=True),
            'pool1': nn.MaxPool2d(kernel_size=2, stride=2),

            'conv2': nn.Conv2d(6, 16, 5),
            'relu2': nn.ReLU(inplace=True),
            'pool2': nn.MaxPool2d(kernel_size=2, stride=2),
        }))

        self.classifier = nn.Sequential(OrderedDict({
            'fc1': nn.Linear(16*5*5, 120),
            'relu3': nn.ReLU(),

            'fc2': nn.Linear(120, 84),
            'relu4': nn.ReLU(inplace=True),

            'fc3': nn.Linear(84, classes),
        }))

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size()[0], -1)
        x = self.classifier(x)
        return x


# net = LeNetSequential(classes=2)
# net = LeNetSequentialOrderDict(classes=2)
#
# fake_img = torch.randn((4, 3, 32, 32), dtype=torch.float32)
#
# output = net(fake_img)
#
# print(net)
# print(output)

ModuleList

class ModuleList(nn.Module):
    def __init__(self):
        super(ModuleList, self).__init__()
        self.linears = nn.ModuleList([nn.Linear(10, 10) for i in range(20)])

    def forward(self, x):
        for i, linear in enumerate(self.linears):
            x = linear(x)
        return x

# net = ModuleList()
#
# print(net)
#
# fake_data = torch.ones((10, 10))
#
# output = net(fake_data)
#
# print(output)

ModuleDict

class ModuleDict(nn.Module):
    def __init__(self):
        super(ModuleDict, self).__init__()
        self.choices = nn.ModuleDict({
            'conv': nn.Conv2d(10, 10, 3),
            'pool': nn.MaxPool2d(3)
        })

        self.activations = nn.ModuleDict({
            'relu': nn.ReLU(),
            'prelu': nn.PReLU()
        })

    def forward(self, x, choice, act):
        x = self.choices[choice](x)
        x = self.activations[act](x)
        return x

net = ModuleDict()

fake_img = torch.randn((4, 10, 32, 32))

output = net(fake_img, 'conv', 'relu')

print(output)

总结

 

Keras-LeNet


import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, Conv2D, MaxPooling2D, Flatten
from keras.optimizers import Adam


model = Sequential()
model.add(Conv2D(input_shape=(28, 28, 1), kernel_size=(5, 5), filters=20, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=2, padding='same'))

model.add(Conv2D(kernel_size=(5, 5), filters=50,  activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2), strides=2, padding='same'))

model.add(Flatten())
model.add(Dense(500, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: KerasPyTorch都是深度学习框架,但它们的设计和实现方式有所不同。Keras是一个高级API,它可以在TensorFlow、Theano和CNTK等后端上运行。而PyTorch是一个动态图框架,它可以更灵活地构建和调试模型。 在使用KerasPyTorch时,它们的对应关系如下: 1. Keras中的Sequential模型对应PyTorch中的nn.Sequential模块。 2. Keras中的Dense层对应PyTorch中的nn.Linear模块。 3. Keras中的Conv2D层对应PyTorch中的nn.Conv2d模块。 4. Keras中的MaxPooling2D层对应PyTorch中的nn.MaxPool2d模块。 5. Keras中的Dropout层对应PyTorch中的nn.Dropout模块。 6. Keras中的Activation层对应PyTorch中的nn.ReLU模块。 7. Keras中的Optimizer对应PyTorch中的optim模块。 总的来说,KerasPyTorch都是非常优秀的深度学习框架,它们都有自己的优点和适用场景。选择哪一个框架,应该根据具体的需求和实际情况来决定。 ### 回答2: KerasPyTorch是两个流行的深度学习框架,它们都是深度学习在工业界和研究领域中最流行的框架之一。在深度学习领域,KerasPyTorch的选择非常重要,它们都有它们自己的优势和用途。 Keras是TensorFlow的高级API,它提供了一些简单易用的工具和接口,使得深度学习模型的构建变得更加容易。Keras主要的设计目标是让那些不熟悉深入的数学知识的开发者可以快速创建深度学习模型。在Keras的设计中,一些常见的深度学习模型可以被快速地实现和训练。Keras相对于PyTorch而言,提供了更加易用的界面和快速的开发速度,同时还提供了很多可以直接使用的现成的深度学习模型。 PyTorch是一个非常灵活的深度学习库,提供了优秀的支持,包括GPU加速计算、自动求导、动态图等特性。相比KerasPyTorch更加自由和灵活,允许探索更多的深度学习算法和模型。PyTorch的开发者可以使用它提供的Python语言进行开发。PyTorch还允许用户进行低层次的Tensor操作,而这些操作对于那些需要进行大量复杂运算或者超越标准算法范畴的开发者而言会非常有用。 需要注意的是,尽管KerasPyTorch在功能和用途上存在一些差异,但是两种工具在很多方面也是相互补充的。总的来说,Keras更适合那些需要快速开发深度学习模型的开发者,而PyTorch则更适合那些需要更加灵活、自由和深入探究深度学习的开发者。两者的共同点在于它们都是开源的,广泛应用于深度学习的实践、工业和研究领域,以及适用于构建复杂的模型和算法。 ### 回答3: KerasPyTorch都是常用的深度学习框架。Keras是Python编程语言的高级神经网络应用编程接口,它可以在TensorFlow、Theano和CNTK等后端中运行。PyTorch是由Facebook开发的基于Python的深度学习框架。 KerasPyTorch之间的对应关系是比较相似的。它们都提供易于使用的高级API,以及专业、灵活的低级API。在使用上,Keras的API非常简单,学习起来比较容易,而PyTorch的API则更加全面和灵活,可以支持更高层次的自定义操作和更复杂的模型。 在模型定义方面,Keras提供的是“模型为序列”的概念,该模型由一系列的层构成,这样可以很容易地定义一些简单的模型。而PyTorch则采用类似于张量的数据结构,这种方式对于更复杂的模型来说更加友好,它还提供了动态图形式,可以更好地处理更难的计算图形构建。 在训练模型时,Keras的API使得训练过程非常简单,只需几行代码就可以完成,并且拥有一些实用的模型评估指标,这对于新手来说非常有帮助。同时,PyTorch也提供了丰富的损失函数和优化算法,因此对于训练中的一些更复杂的需求,例如自定义损失函数和权重初始化等也提供了很好的支持。 总体而言,KerasPyTorch各有其优点。Keras对于快速建立和训练简单模型及快速上手非常友好,而PyTorch在动态图、flexibility上拥有更强的优势,在处理一些较为复杂的模型时表现很好。最终选择框架还要看用户的需求和使用经验。对于新手来说,Keras或许更为合适;而对于有一定经验和对模型标准的精度要求较高的用户来说,PyTorch则更为适宜。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值