神经网络训练双螺旋曲线模型

AClassification Problem

1.    SYSTEM: ATwo-Nested-Spirals Problem

Two-Nest-Spiralsproblem is a well-known classification benchmark problem. It contains twonested spirals, ‘o’ and ‘+’, as shown in figure. The task is to separate thetwo nested spirals.

用matlab实现BP算法,其中加入了L2正则化项,在隐藏层最后一层使用Dropout。输出进行独热编码(one-hot),使用softmax。在图上打印出模型进行判断的边界。

 有4个文件。

1)TwoNestSpiralsUseGivenSet.m

2)ReLU.m

3)  ReLUGradient.m

4)  softmax.m

     应该要把定义一个前向传播的函数。应该在训练和测试的时候都要用到。如果修改了训练中前向传播的代码,而忘记修改测试的代码,则会出错或者产生奇怪的结果。但是感觉matlab中传递权重和偏置给函数中很麻烦,貌似不能直接将所有权重和偏置放入一个集合,然后在函数中重新取出。

------------- 没有开启dropout


------------------开启dropout



------------------模型的判定区域




1)TwoNestSpiralsUseGivenSet.m

% 可以自由设置螺旋曲线的样本个数。 可以正确画出正负类的区域。
% 可以使用softmax
% 加入正则项
% 给隐藏层最后一层使用dropout
clear;
%% 产生双螺旋数据
train_num=100;  % 0和1的样本各train_num个。 可以设置任意数目。
% 
train_i=(1: (105-1)/train_num: 105-(105-1)/train_num)';

%双螺旋数据点的产生方程
alpha1=pi*(train_i-1)/25;
beta=0.4*((105-train_i)/(104)); %
x0=beta.*cos(alpha1);
y0=beta.*sin(alpha1);
z0=zeros(train_num,1);
x1=-beta.*cos(alpha1);
y1=-beta.*sin(alpha1);
z1=ones(train_num,1);

% 随机打乱顺序
k=rand(1,2*train_num);
[m,n]=sort(k);

train=[x0 y0 z0;x1,y1,z1]; 
train_label1=train(n(1:2*train_num),end)';    % 1*(2*train_num)
train_data1=train(n(1:2*train_num),1:end-1)'; % 2*(2*train_num)
      
% 把1维的输出变成2维的输出 0->[1 0], 1->[0 1]
for i=1:2*train_num
    switch train_label1(i)
        case 0
            train_label2(i,:)=[1 0];
      
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值