题目
3.5 多层感知机【斯坦福21秋季:实用机器学习中文版】代码实现
完整代码
'''
Description: 多层感知机的实现
Autor: 365JHWZGo
Date: 2022-03-21 16:02:55
LastEditors: 365JHWZGo
LastEditTime: 2022-03-21 16:59:52
'''
'''
main idea
x->linear->relu->linear->sigmoid->linear->y
[m,n]->[m,p]->[m,q]->[m,r]->[m,o]
'''
import math
import torch
torch.manual_seed(1)
m = 3
n = 4
p = 3
o = 2
r = 5
# func relu
def relu(X):
return torch.maximum(X, torch.zeros(X.shape))
# func sigmoid
def sigmoid(X):
return torch.tensor([1/(1+torch.exp(-y)) for x in X for y in x]).reshape(X.shape)
# func linear
def linear(X, w, b):
return torch.matmul(X,w)+b
if __name__ == "__main__":
# X.shape [m,n]
X = torch.randn((m, n))
# linear1
w1 = torch.randn((n,p))
b1 = torch.zeros((m,1))
# linear2
w2 = torch.randn((p,r))
b2 = torch.zeros((m,1))
# linear3
w3 = torch.randn((r,o))
b3 = torch.zeros((m,1))
# mlp实现过程
l1_x = linear(X,w1,b1)
relu_x = relu(l1_x)
print('func relu\n',relu_x)
r_x = torch.relu(l1_x)
print('torch.relu\n',r_x)
l2_x = linear(relu_x,w2,b2)
sigmoid_x = sigmoid(l2_x)
print('func sigmoid\n',sigmoid_x)
s_x = torch.sigmoid(l2_x)
print('torch.sigmoid\n',s_x)
out = linear(sigmoid_x,w3,b3)
print(out)