神经网络 matlab实现 感知器_MLP_,实现简化的 && 运算符

学习神经网络,顺便记个笔记。

若转载,请贴 https://blog.csdn.net/u013271656/article/details/101373902

 

1. 感知器_MLP

本文参考链接中大佬写的文章,通俗易懂。感知器(MLP介绍以及python代码):

https://www.zybuluo.com/hanbingtao/note/433855

贴一下MLP介绍:

接下来将介绍如何用感知器实现 && 函数

我们设计一个感知器,让它来实现 && 运算。 && 运算符被称为逻辑与运算符。它需要两个表达式作为操作数,并创建一个表达式,只有当两个子表达式都为 true 时,该表达式才为 true。

为了计算方便,此处我们用0表示false,用1表示true。下表是各情景下&&运算符输出结果  output = (x1 && x2)

x1x2outPut
000
010
100
111

 

输入表中第一行数据(即x1=x2=0),那么根据公式(1),计算输出:

其中:

<1>. 激活函数 f 就是前面写出来的阶跃函数 y = f(w*z+b)。

<2>. 因为输入特征的维度为2,我们令其权重相等: w1=w2=0.5;,假设偏置(bias)值为 -0.8

 神经网络模型可以理解为:其就像一个函数模型y = ax + b,通过输入数据得到的结果反馈,来更新模型中的参数a与参数b。

此处,我们训练的目标参数就是y = f(w*z+b) 中的 w、b。接下来介绍如何进行训练。

2.  训练感知机中参数

3.  实现模型的训练、验证

matlab代码如下(MLP类):

classdef PerceptronMLP < handle
    properties
        activator
        weights;
        bias;
    end
    
    methods 
        function obj = PerceptronMLP(input_num, fobj)
            % 初始化感知器,设置输入参数的个数,以及激活函数。
            % 激活函数的类型为 double -> double
            obj.activator = fobj;
            if nargin == 2
                obj.weights = zeros(1, input_num);
                obj.bias = 0.0;
            else
                error('Value must be numeric')
            end
        end
        
        function output = predict(obj, input_vec)
            temp = input_vec.*obj.weights;
            output = obj.activator(sum(sum(temp)) + obj.bias);
                
        end
        
        function train(obj, input_vecs, labels, iteration, rate)
            for i = 1:iteration
                obj.one_iteration(input_vecs, labels, rate);
            end
        end
        
        function one_iteration(obj, input_vecs, labels, rate)
            % 一次迭代,把所有的训练数据过一遍
            for i = 1:max(size(input_vecs))
                input_vec = input_vecs(i,:);
                output = obj.predict(input_vec);
                label = labels(i,:);
                obj.update_weights(input_vec, output, label, rate);
            end
            debug = 1;
        end
        
        function update_weights(obj, input_vec, output, label, rate)
            % 按照感知器规则更新权重
            delta = label - output;
            obj.weights = obj.weights + rate.*delta.*input_vec;
            % 更新bias
            obj.bias = obj.bias + rate * delta;
        end
    end
end

接下来,训练感知器类并输入数据进行计算,看看是否符合预期。

clc
clear all
input_vecs = [1,1; 0,0;1,0; 0,1];
labels = [1, 0, 0, 0]';

fobj = @(x) x> 0;
p = PerceptronMLP(2, fobj);
p.train(input_vecs, labels, 10, 0.1);

p.predict([1,0])
p.predict([1,1])
p.predict([0,1])
p.predict([0,0])

 

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MLP (多层感知器) 神经网络是一种常用的人工神经网络模型,它由一个输入层、一个或多个隐藏层和一个输出层组成。在 MATLAB 中,我们可以使用 Neural Network Toolbox 来实现 MLP 神经网络。 要实现一个简单的 MLP 神经网络,首先需要准备训练数据和测试数据。然后,可以使用 MATLAB 的 neuronetwork 工具箱中的函数来创建一个新的神经网络对象,设置网络的结构(包括输入层、隐藏层和输出层的神经元数量)、激活函数和训练参数等。 接下来,可以通过函数来训练神经网络。在训练过程中,可以使用不同的优化算法和损失函数来调整网络参数,以获得最佳的拟合效果。在训练完成后,就可以使用训练好的神经网络来进行预测了。 在 MATLAB实现 MLP 神经网络的代码通常包括以下步骤: 1. 准备数据 2. 创建神经网络对象 3. 设置网络结构和训练参数 4. 训练神经网络 5. 使用训练好的网络进行预测 下面是一个简单的 MLP 神经网络MATLAB 代码示例: ```matlab % 准备数据 X = ; % 输入数据 Y = ; % 输出数据 % 创建神经网络对象 net = feedforwardnet([10 5]); % 创建一个包含两个隐藏层的神经网络 % 设置网络结构和训练参数 net = configure(net, X, Y); net.trainParam.lr = 0.01; % 设置学习率 % 训练神经网络 net = train(net, X, Y); % 使用训练好的网络进行预测 Y_pred = net(X); ``` 以上是一个简单的 MLP 神经网络MATLAB 代码示例,实际应用中可能还需要进行更多的参数调整和优化。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值