0%

深度学习——nn.ReLU和nn.Sigmoid的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d, Sigmoid, ReLU
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 引入非线性函数的作用
# 真实世界有些原始数据本身就是线性不可分的,必须要对原始空间进行一定的非线性操作
# 对于回归问题也可以同样运用高数的思维,把回归看成分类问题的无限细分,当极限存在时,分类也就成为了回归问题。

# 定义神经网络操作
class MySigmoid(nn.Module):
def __init__(self):
super(MySigmoid, self).__init__()
# 非线性操作,两种,这里先只演示sigmoid
self.sigmoid = Sigmoid()
self.relu = ReLU()

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


# 获取数据
dataset = torchvision.datasets.CIFAR10(root="data-CIFAR10", train=False, download=True,
transform=torchvision.transforms.ToTensor())
dataLoader = DataLoader(dataset, batch_size=64, shuffle=True)

# 定义变量等
sigmoid = MySigmoid()
writer = SummaryWriter("log-sigmoid")
step = 0

# 写入,观察非线性结果
for data in dataLoader:
img, tag = data
# 操作前
writer.add_images("input", img, step)
# 非线性操作后
output = sigmoid(img)
writer.add_images("output-sigmoid", output, step)
step = step + 1

# 关闭写入流
writer.close()