11李沐动手学深度学习v2/MLP (Multilayer Perceptron) 多层感知机简洁实现

import torch
from torch import nn
from d2l import torch as d2l
# 模型 超参数 激活函数(使用那种激活函数也可以认为是超参数)
net=nn.Sequential(nn.Flatten(),nn.Linear(784,256),nn.ReLU(),nn.Linear(256,10))
# 参数 W和b
def init_weights(m):
    '''
    设置线性层的权重
    :param m 全连接层 线性层
    '''
    if type(m)==nn.Linear:
        nn.init.normal_(m.weight,std=0.01)

# 模型应用参数初始化函数 
net.apply(init_weights)
Sequential(
  (0): Flatten(start_dim=1, end_dim=-1)
  (1): Linear(in_features=784, out_features=256, bias=True)
  (2): ReLU()
  (3): Linear(in_features=256, out_features=10, bias=True)
)
# 损失函数
batch_size,lr,num_epochs=256,0.1,10
loss=nn.CrossEntropyLoss(reduction='none')
# 优化算法
trainer=torch.optim.SGD(net.parameters(),lr=lr)
# 数据
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)
# 训练
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

11李沐动手学深度学习v2/MLP (Multilayer Perceptron) 多层感知机简洁实现_第1张图片

query

神经网络的层怎么算

  • 答:输入层+输出层+隐藏层-1;可以学习权重的层有多少层

多层感知机和SVM

  • 答:性能差不多,MLP迁移更容易,SVM迁移时里面很多东西都需要更换,SVM更简单超参数少,SVM数学原理更好

神经网络增加隐藏层层数还是神经元个数

  • 答:胖的神经网络和深的神经网络理论上是等价的,但深的神经网络更好训练。胖的神经元很容易过拟合
  • 答:个数增加,信息更多,网络更敏感;层数增多更抽象,泛化能力更好。越抽象泛化能力越好,适应性更好
  • 答:逐步训练,无隐藏层;单层隐藏层32个神经元,单层隐藏层64个神经元,单层隐藏层128个神经元;2层隐藏层…

激活函数作用

  • 答:引入非线性,将简单线性函数组合成复杂函数

激活函数重要程度

  • 答:激活函数就使用relu。选择隐藏层大小,选择神经元个数等超参数更加重要

数据科学家

  • 答:80%时间在弄数据,20%时间在调参

你可能感兴趣的:(深度学习,深度学习,机器学习,python)