本关任务:通过学习神经元的相关知识,编写一个线性神经元模型。
为了完成本关任务,你需要掌握:
神经元是神经网络操作的基本信息处理单位,是神经网络实现的基础。神经元模型有三个基本元素:
1.突触或连接链集。每一个都由其权值或者强度作为特征。具体来说,在连到神经元k的突触j上的输入信号xj乘以k的突触权值wkj;
2.加法器。用于求输入信号被神经元的相应突触加权的和;
3.激活函数。用来限制神经元输入振幅。
其基本结构如下图1:
图中的神经元模型还包括一个外部偏置(bias),记为bk。偏置bk的作用是根据其为正或是为负,相应地增加或降低激活函数的网络输入。其数学公式如下:
其中x1,x2,…,xm是输入信号,wk1,wk2,…,wkm为神经元k的突触权值,uk是输入信号的线性组合器的输出,bk为偏置,激活函数为φ(⋅),yk神经元输出信号。
pytorch
深度学习框架为我们提供了一个进行矩阵乘法的方法——torch.mm(a,b)
。
举个例子,假设矩阵 a 的维度为 (3,4)
,矩阵 b 的维度为(4,2)
,则torch.mm(a,b)
返回的矩阵的维度则为(3,2)
。
import torch
import numpy as np
a = torch.tensor(np.random.random((3, 4)), dtype=torch.float32) # 随机生成一个维度为 [3,4] 的矩阵(tensor)
"""
例如:
[[0.3886, 0.3006, 0.4032, 0.9880],
[0.7401, 0.0117, 0.8987, 0.6140],
[0.1048, 0.2333, 0.6146, 0.7663]]
"""
b = torch.tensor(np.random.random((4, 2)), dtype=torch.float32) # 随机生成一个维度为 [4,2] 的矩阵(tensor)
"""
例如:
[[0.3555, 0.2108],
[0.3660, 0.4737],
[0.7785, 0.2913],
[0.3347, 0.4046]]
"""
y = torch.mm(a, b) # y 的维度为 [ 3,2 ]
"""
[[0.8928, 0.7416],
[1.1725, 0.6718],
[0.8576, 0.6217]]
"""
根据提示,在右侧编辑器 Begin-End 区间补充代码,编写出神经元模型。
平台会对你编写的代码进行测试:
测试输入:无
预期输出:
True
开始你的任务吧,祝你成功!
import torch
def linear(X,w,b):
"""
线性神经元
:param X: 训练数据。形状为[ batch_size, num_inputs ]
:param w: 权值。形状为[ num_inputs,1]
:param b: 偏置项。形状为[ 1 ]
:return: 线性计算结果
"""
# 矩阵相乘可以使用torch.mm(a,b)
########## Begin ##########
y = torch.mm(X,w)+b
########## End ##########
return y