资源简介
卷积网络架构-LeNet-5
代码片段和文件信息
import torch
import random
import math
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
from torchvision import datasets transforms
import matplotlib.pyplot as plt
class MyLinear(nn.Module):
def __init__(self in_features out_features bias=True):
super(MyLinear self).__init__() # 和自定义模型一样,第一句话就是调用父类的构造函数
self.in_features = in_features
self.out_features = out_features
# 参数定义
self.weight = nn.Parameter(torch.Tensor(in_features out_features)) # 使用Parameter来定义
if bias:
self.bias = nn.Parameter(torch.Tensor(out_features)) # 使用Parameter来定义
else:
self.register_parameter(‘bias‘ None)
# 参数初始化
self.reset_parameters()
def reset_parameters(self):
stdv = 1. / math.sqrt(self.weight.size(1))
self.weight.data.uniform_(-stdv stdv)
if self.bias is not None:
self.bias.data.uniform_(-stdv stdv)
def forward(self x):
y = x.mm(self.weight) + self.bias
return y
class MyConv(nn.Module):
def __init__(self in_channels out_channels kernel_size stride padding bias):
super(MyConv self).__init__()
self.in_channels self.out_channels = in_channels out_channels # 输入通道数输出通道数
self.kernel_size self.stride self.padding = kernel_size stride padding # 卷积核的大小{k_W=k_H},卷积的步长; padding的大小
self.bias_true = bias # 偏置项 {Ture False}
# 卷积核的数量(输出通道数),输入通道数,卷积核的大小:HW
self.weight = nn.Parameter(torch.Tensor(out_channels in_channels kernel_size kernel_size))
if self.bias_true == True:
# 偏置项: 偏置项数量 = 卷积核的数量,所以需要out_channels个偏置参数
self.bias = nn.Parameter(torch.Tensor(out_channels 1))
else:
self.register_parameter(‘bias‘ None)
# 参数初始化
self.reset_parameters()
def forward(self x):
# Padding 补0操作 在x 左右上下 分别填充self.padding个0
ZeroPad = nn.ZeroPad2d(padding=(self.padding self.padding self.padding self.padding))
x = ZeroPad(x) # Padding 操作
conv_x = self.conv_compute(x) # 卷积操作
return conv_x
def conv_compute(self x):
# x: padding 后的 data
(batch in_c H W) = x.shape # 图片的batchsiez,通道数,高,宽
(out_c in_c kernel_size_H kernel_size_W) = self.weight.shape # 卷积核的数量,通道数 卷积核的大小:HW
new_H = int(1 + (H - kernel_size_H) / self.stride) # 卷积后得到的图片高
new_W = int(1 + (W - kernel_size_W) / self.stride) # 卷积后得到的图片宽
x_unfold = F.unfold(x (kernel_size_H kernel_size_W)
stride=self.stride) # x_unfold:(batch in_c*k_H*k_W L) L: (new_H*new_W)
w = self.weight
# 1. (batch L in_c*k_H*k_W) matmul (in_c*k_H*k_Wout_c)--> (batch L out_c)
# 2. out_unf: (batch L out_c)--> (batch out_c L)
out_unf = x_unfold.transpose(1 2).m
- 上一篇:呼吸灯(IO.py)
- 下一篇:BP算法手写梯度计算
相关资源
- MNIST手写体数字训练/测试数据集(图
- Python-用PyTorch10实现FasterRCNN和MaskRCNN比
- Python-基于tensorflow实现的用textcnn方法
- Python-FastSCNN的PyTorch实现快速语义分割
- Python-滑动窗口高分辨率显微镜图像分
- 基于深度学习堆栈自动编码器模型的
- 性别模型库 simple_CNN.81-0.96.hdf5
- lightened_cnn_S 5M模型
- bayes分类python
- knn算法识别mnist图片-python3
- TBCNN 源码
- Ubuntu18.04LTS下安装 Caffe-GPU版本及 Ana
- faster rcnn(python+caffe)源代码
- CNN卷积神经网络PYTHON
- mnist手写数字识别数据集npz文件.zip
- 基于CNN的图像搜索demo
- python实现的卷积神经网络CNN无框架
- 基于Python的手写字体识别系统
- 机器学习对应的相关python代码SVM、C
- 基于 CNN 的疲劳检测源码-Python
- CNN网络代码,数据集,及对应论文和
- Faster-RCNN-TensorFlow-Python3.5-master
- Python学习实践-sklearn分类算法实践-M
- MTCNN源码python版
- 基于Python的图像分类
- keras实现中文文本分类
- pytorch版本手写体识别MNIST.zip
- Mask R-CNN源码(TensorFlow版本)
- 自己编写的MNIST手写字Python实现
- TensorflowOpenCV实现的CNN车牌识别代码
评论
共有 条评论