2021年人工神经网络第一次作业:参考答案-1

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年人工神经网络第一次作业:参考答案-1相关的知识,希望对你有一定的参考价值。

简 介: 本文给出了 2021年人工神经网络第一次作业要求 中,由同学提交的作业示例。

关键词 人工神经网络感知机BP数据压缩

背景介绍
感知机
文章目录
模式分类
单层BP网络
RBF网络
函数逼近
单隐层BF网络
RBF网络
数据压缩
图像压缩
MNIST
人工提取特征
图片直接输入
讨论
总 结

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年人工神经网络第三次作业要求以及参考答案

2021年人工神经网络第三次作业-第二题:遗传算法与人工神经网络-参考答案

2021年人工神经网络课程作业处理记录

2021年人工神经网络第一次作业要求

2021年春季学期-信号与系统-第十一次作业参考答案

2021年人工神经网络第四次作业-第一题:LeNet对于水果与动物进行分类