深度学习笔记(五)

目录

本文将介绍如下内容

  • 多层感知机
  • 多层感知机的从零开始实现
  • 多层感知机的简洁实现



多层感知机


隐藏层

多层感知机在单层神经网络的基础上引入了一到多个隐藏层。
在这里插入图片描述
输入和输出个数分别为4和3,隐藏层包含5个隐藏单元。
由于输入层不涉及计算,因此该多层感知机的层数为2。
样本批量大小为n,输入个数为d(4)。假设多层感知机只有一个隐藏层,其中隐藏单元个数为h(5)。

记隐藏层的输出(隐藏层变量)为H,有H∈Rn*h
可以设隐藏层的权重参数和偏差参数分别为Wh∈Rd*h和bh1*h
输出层的权重和偏差参数分别为Oo∈Rh*q和b0∈R1*q

其输出Oo∈Rh*q 的计算为:
H = XWh + bh
O = HWo + bo
O = (XWh + bh)Wo + bo = XWhWo+bhWo +bo




激活函数

ReLu函数

ReLu(x) = max(x,0),只保留正数元素,负数元素清零

sigmoid函数

在这里插入图片描述
在这里插入图片描述
导数为:
在这里插入图片描述

tanh函数

tanh(双曲正切)函数可以将元素的值变换到-1和1之间。
在这里插入图片描述
在这里插入图片描述
导数为
在这里插入图片描述




多层感知机的从零开始实现

# 读取数据集
batch_size = 256
train_iter,test_iter = d2l.load_data_fashion_mnist(batch_size)

# 定义模型参数
#输入个数784,设超参数隐藏单元个数为256

num_inputs,num_outputs,num_hiddens = 784,10,256

W1 = nd.random.normal(scale=0.01,shape=(num_inputs,num_hiddens))
b1 = nd.zeros(num_hiddens)
W2 = nd.random.normal(scale=0.01,shape=(num_hiddens,num_outputs))
b2 = nd.zeros(num_outputs)
params = [W1,b1,W2,b2]
for param in params:
    param.attach_grad()

def relu(X):
    return nd.maximum(X,0)

# 定义模型
def net(X):
    X = X.reshape((-1,num_inputs))
    H = relu(nd.dot(X,W1)+b1)
    return nd.dot(H,W2) + b2

# 定义损失函数
loss = gloss.SoftmaxCrossEntropyLoss()

# 训练模型
num_epochs,lr = 5,0.5
test = d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,params,lr)
print(test)

运行结果

在这里插入图片描述




多层感知机的简洁实现

# 和softmax回归的唯一不同在于,多加一个全连接层作为隐藏层。隐藏单元为256,并使用ReLu作激活函数
# 读取数据集
batch_size = 256
train_iter,test_iter = d2l.load_data_fashion_mnist(batch_size)

net = nn.Sequential()
net.add(nn.Dense(256,activation='relu'),nn.Dense(10))
net.initialize(init.Normal(sigma=0.01))

# 定义损失函数
loss = gloss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.5})

# 训练模型
num_epochs,lr = 5
test = d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,None,None,trainer)
print(test)


运行结果

  • batch_size = 256
  • lr = 0.5
  • hiddens = 256
    在这里插入图片描述


  • batch_size = 256
  • lr = 0.5
  • hiddens = 200
    在这里插入图片描述


  • batch_size = 256
  • lr = 0.5
  • hiddens = 300

在这里插入图片描述

增加隐藏层的个数,不一定能提高模型训练的正确率,相反,减少隐藏层个数,也不一定会降低训练的正确率。



猜你喜欢

转载自blog.csdn.net/qq_40318498/article/details/100580400