pytorch中resnet_用Pytorch手工实现ResNet50

《吴恩达深度学习课程》第四课第二周的作业是:使用Keras和Tensorflow编写ResNet50,用程序实现题目中描述的网络结构。由于程序填空提供了不少示例,做完后仍感觉理解不透彻,又使用Pytorch实现了一遍。

ResNet50包含49个卷积层和1个全连接层,属于较大型的网络,实现起来略有难度。对于理解数据流、卷积层、残差、瓶颈层,以及对大型网络的编写和调试都有很大帮助。

网络结构

ResNet网络结构如下图所示:

代码

下面使用约100行代码实现了ResNet50网络类(可缩减至80行左右),另外100行代码用于处理数据,训练和预测。

准备数据:

import math

import numpy as np

import h5py

import matplotlib.pyplot as plt

import scipy

from PIL import Image

from scipy import ndimage

import torch

import torch.nn as nn

from cnn_utils import *

from torch import nn,optim

from torch.utils.data import DataLoader,Dataset

from torchvision import transforms

%matplotlib inline

np.random.seed(1)

torch.manual_seed(1)

batch_size = 24

learning_rate = 0.009

num_epocher = 100

X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()

X_train = X_train_orig/255.

X_test = X_test_orig/255.

class MyData(Dataset): #继承Dataset

def __init__(self, data, y, transform=None): #__init__是初始化该类的一些基础参数

self.transform = transform #变换

self.data = data

self.y = y

def __len__(self):#返回整个数据集的大小

return len(self.data)

def __getitem__(self,index):#根据索引index返回dataset[index]

sample = self.data[index]

if self.transform:

sample = self.transform(sample)#对样本进行变换

return sample, self.y[index] #返回该样本

train_dataset = MyData(X_train, Y_train_orig[0],

transform=transforms.ToTensor())

test_dataset = MyData

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值