2021年人工神经网络第一次作业:参考答案-1
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年人工神经网络第一次作业:参考答案-1相关的知识,希望对你有一定的参考价值。
简 介: 本文给出了 2021年人工神经网络第一次作业要求 中,由同学提交的作业示例。
关键词
: 人工神经网络,感知机,BP,数据压缩
0.1 背景介绍
针对于 2021年人工神经网络第一次作业要求 中,提交作业中具有典型的代表。
- 作业作者:樊懿轩,2021310712
§01 感知机
本题相关代码见q1.py
,网络结构如下所示,激活函数为符号函数。
def train(train_data, mode):
def sgn(x, mode):
if x >= 0:
return 1
else:
return mode
weight = [0., 0., 0.]
bias = 0.
learning_rate = 100
epoch = 30
for num in range(epoch):
for x, y in train_data:
predict = sgn(weight[0] * x[0] + weight[1] * x[1] + weight[2] * x[2] + bias, mode)
print("train data: x: (%d, %d, %d) y: %d ==> predict: %f" % (x[0], x[1], x[2], y, predict))
if y != predict:
weight[0] = weight[0] + learning_rate * (y - predict) * x[0]
weight[1] = weight[1] + learning_rate * (y - predict) * x[1]
weight[2] = weight[2] + learning_rate * (y - predict) * x[2]
bias = bias + learning_rate * (y - predict)
print("epoch: %d updated weight: (%f, %f, %f) bias: %f" % (num + 1, weight[0], weight[1], weight[2], bias))
return weight, bias
train_data1 = [([1, 1, 1], 1), ([1, 1, 0], 0), ([1, 0, 1], 0), ([0, 1, 1], 0)]
train_data2 = [([1, 1, 1], 1), ([1, 1, -1], -1), ([1, -1, 1], -1), ([-1, 1, 1], -1)]
print('------Mode1------')
train(train_data1, mode=0)
print('------Mode2------')
train(train_data2, mode=-1)
▲ 图1.1 感知机的结构
算法轮流将训练数据输入网络并计算输出,当输出和期望输出不符时以学习速率调整参数直至收敛。在训练过程中,将按顺序使用完四组训练样本称为完成一轮训练;当一轮训练中均不出现需要调整参数的情况时,认为算法收敛,下表记录学习速率和数据表达方式对收敛速率的影响。可见适当调整学习速率有助于加快收敛,双极性的数据表达方式在本题实现的模型中能够更快收敛。
▲ 图1.2 不同数据结构以及学习速率对应的收敛速度
§02 模式分类
2.1 单层BP网络
本题相关代码见q2_1.py
,网络结构如下所示,激活函数为Tanh
函数。
import torch
from torch import nn
from torch.utils.data import DataLoader, Dataset
HIDDEN_UNIT = 10
NOISE = True
class ClsDataset(Dataset):
def __init__(self):
self.dataset = [([0.75, 1], [1, -1, -1]), ([1, 0.5], [1, -1, -1]), ([0.5, 0.25], [1, -1, -1]), ([0.5, 0.75], [-1, 1, -1]),
([1, 0.75], [-1, 1, -1]), ([0.75, 0.25], [-1, 1, -1]), ([0.25, 0.25], [-1, -1, 1]), ([0.75, 0.5], [-1, -1, 1]),
([0.75, 0.75], [-1, -1, 1])]
def __len__(self):
return len(self.dataset)
def __getitem__(self, index):
if NOISE:
return torch.Tensor(self.dataset[index][0]) + torch.rand(2) / 2 - 0.25, torch.Tensor(self.dataset[index][1])
return torch.Tensor(self.dataset[index][0]), torch.Tensor(self.dataset[index][1])
class cls(nn.Module):
def __init__(self):
super().__init__()
self.model = nn.Sequential(nn.Linear(in_features=2, out_features=HIDDEN_UNIT), nn.Tanh(),
nn.Linear(in_features=HIDDEN_UNIT, out_features=3), nn.Tanh())
def forward(self, *x):
x = self.model(x[0])
return x
clsdataset = ClsDataset()
model = cls()
data_loader = DataLoader(dataset=clsdataset, batch_size=9)
loss_func = nn.MSELoss()
optimizer = torch.optim.SGD2021年人工神经网络第三次作业要求以及参考答案