自己写了matlab神经网络,公式正确但训练失败 100C

关键就在偏导数计算这两行,两行合并起来就是完整的误差传导公式,梯度检验也是正确的,但训练正确率一直没有提高,当去掉第二行时,训练就成功了,不过不符合公式,不知道到底哪里出了问题。
delte2=theta2_non'*delte3;%第二层误差,行

delte2=delte2.*a2(2:end,:).*(1-a2(2:end,:));%完全版误差公式
图片说明

 clc;clear;
%============初始化================
x=[ 1, 2,-3,-4,-5,-2, 2,2;...
   -1,-2,-3,-4, 5, 2, 3,4;...
    1,-2, 3,-4, 5,-3,-3,1];
y=[1,1,0,0,0,0,0,0;...
   0,0,0,0,0,0,1,1;...
   0,0,1,1,1,1,0,0];
x_e=[-1.5, 3,2,-5,-1;...
        7,-1,1,-1,2;...
        6, 0,0,-2,1];
x_e_label=[0,1,0,0,0;...
           0,0,1,0,0;...
           1,0,0,1,1];
m=length(y(1,:));
alpha=1;
lamda=0.02;%正则化参数
theta1=(rand(3,3)-0.5)/10;%参数初始化,范围在-0.05~0.05之间,三行三列
theta2=(rand(3,4)-0.5)/10;
a20=1;%偏置不变
%theta1,2为第一二层参数,第三层没有,dtheta1,2为第一二层参数的偏导数容器
%a1为特征,数值偏离1,a2,3都是激活过后的数值,在1附近
%delte2,3为各层误差值
%============初始化================

%============总循环================
for q=1:500
    J=0;
    delte2=zeros(3,1);
    delte3=zeros(3,1);
    dtheta1=zeros(3,3);
    dtheta2=zeros(3,4);%每次更新对偏导数置零
    correct_num=0;
    %========= %计算平均偏导数循环===========
    for i=1:m
        a1=x(:,i);%取每列特征数据
        z1=theta1*a1;%列
        raw_a2=1./(1+exp(-z1));%s激活函数
        a2=[a20;raw_a2];%添加偏置a20,列
        z2=theta2*a2;%1列

        a3=1./(1+exp(-z2));
        %y(:,i)-a3第三层误差,列
        delte3=y(:,i)-a3;
        theta2_non=theta2(:,2:4);

        delte2=theta2_non'*delte3;%第二层误差,行    
        delte2=delte2.*a2(2:end,:).*(1-a2(2:end,:));%完全版误差公式
        dtheta1=dtheta1+delte2*a1';%偏导数计算完成,但尚未进行平均,后面的是矩阵
        dtheta2=dtheta2+delte3*a2';
        J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数
    end
    %========计算平均偏导数循环============

    g_check=gradient_check(theta1,theta2,x,y)%梯度检验
    dtheta1
    dtheta2

    %========代价函数和梯度下降============
    J=-J/m;%+lamda/2/m*(sum(sum(theta1.^2))+sum(sum(theta2_non.^2)));%完整代价函数
    theta1=theta1+alpha*dtheta1/m-lamda/m.*theta1;%加入正则化的梯度下降
    temp_theta2=theta2;
    temp_theta2(:,1)=0;%偏置theta不加入正则化计算,故单独拿出来
    theta2=theta2+alpha*dtheta2/m-lamda/m.*temp_theta2;
    fprintf('循环%d,代价函数为:%0.4f,',q,J)
    %========代价函数和梯度下降============

    %========训练集验证====================
    for i=1:length(y(1,:))
        a1=x(:,i);%取每列特征数据
        z1=theta1*a1;%列
        raw_a2=1./(1+exp(-z1));%s激活函数
        a2=[a20;raw_a2];%添加偏置a20,列
        z2=theta2*a2;%1列
        a3=1./(1+exp(-z2));
        train=[y(:,i),a3];
        [~,i1]=max(y(:,i));
        [~,i2]=max(a3);
        if i1==i2
            correct_num=correct_num+1;
        end
    end
    fprintf('训练集正确率:%0.1f\n',correct_num/length(y(1,:))*100);
    %========训练集验证====================
end    
%============总循环===========================

    %============训练完成后进行测试集验证=======
    correct_num=0;
    for i=1:length(x_e(1,:))%测试集验证
        a1=x_e(:,i);%取每列特征数据
        z1=theta1*a1;%列
        raw_a2=1./(1+exp(-z1));%s激活函数
        a2=[a20;raw_a2];%添加偏置a20,列
        z2=theta2*a2;%1列
        a3=1./(1+exp(-z2));
        test_set=[x_e_label(:,i),a3];
        [~,i1]=max(x_e_label(:,i));
        [~,i2]=max(a3);
        if i1==i2
            correct_num=correct_num+1;
        end
    end
    fprintf('测试集正确率:%0.1f\n',correct_num/length(x_e(1,:))*100);
    %============训练完成后进行测试集验证=======

以下是梯度检验

 function    gradient_check=gradient_check(theta1,theta2,x,y)

eps=0.001;
a20=1;
temp_gradient_check=zeros(1,21);

for temp_i=1:21
    temp_theta1=theta1';%先转置,再展开,对单个参数处理,塑形,再转置
    temp_theta2=theta2';
    unrolled_parameter=[temp_theta1(:);temp_theta2(:)]';%参数展开

    unrolled_parameter(temp_i)=unrolled_parameter(temp_i)+eps;%加一点参数
    temp_theta1=reshape(unrolled_parameter(1:9),3,3);
    temp_p_theta1=temp_theta1';
    temp_p_theta2=reshape(unrolled_parameter(10:21),4,3);
    temp_p_theta2=temp_p_theta2';

    unrolled_parameter(temp_i)=unrolled_parameter(temp_i)-2*eps;%减一点参数
    temp_theta1=reshape(unrolled_parameter(1:9),3,3);
    temp_n_theta1=temp_theta1';
    temp_n_theta2=reshape(unrolled_parameter(10:21),4,3);
    temp_n_theta2=temp_n_theta2';

    J=0;
    for i=1:length(y(1,:))
        a1=x(:,i);%取每列特征数据
        z1=temp_p_theta1*a1;%列
        raw_a2=1./(1+exp(-z1));%s激活函数
        a2=[a20;raw_a2];%添加偏置a20,列
        z2=temp_p_theta2*a2;%1列
        a3=1./(1+exp(-z2));
        J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数
    end
    J_p=J;
    J=0;
    for i=1:length(y(1,:))
        a1=x(:,i);%取每列特征数据
        z1=temp_n_theta1*a1;%列
        raw_a2=1./(1+exp(-z1));%s激活函数
        a2=[a20;raw_a2];%添加偏置a20,列
        z2=temp_n_theta2*a2;%1列
        a3=1./(1+exp(-z2));
        J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数
    end
    J_n=J;
    temp_gradient_check(temp_i)=(J_p-J_n)/2/eps;
end
    temp_check=reshape(temp_gradient_check(1:9),3,3);
    gradient_check=[temp_check',reshape(temp_gradient_check(10:21),4,3)'];
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
训练神经网络失败的原因(下)
上半部分 原文链接 4. 没有正则化 正则化典型的就是dropout、加噪声等。即使数据量很大或者你觉得网络不可能出现过拟合,但是对网络进行正则化还是很有必要的 dropout 通常从设定参数为0.75或0.9开始,根据你认为网络出现过拟合的可能性来调整这个参数。另外,如果你确定这个网络不会出现过拟合,那么可以将参数设定为0.99。 正则化不仅仅可以防止过拟合,并且在这个随机过程中,...
matlab进行神经网络训练
用matlab进行神经网络训练
基于MATLAB的神经网络训练
基于MATLAB的神经网络训练模块基于MATLAB的神经网络训练
训练神经网络失败的原因(上)
原文链接 根据原文讲述 原因大致如下: 1. 没有对数据进行归一化 神经网络中对数据进行归一化是不可忽略的步骤,网络能不能正常工作,还得看你有没有做归一化。这个步骤是非常重要的,深度学习领域的人都很清楚,因此论文中也很少有提及到。但是对于初学者来说,很容易在这里栽跟头,比如说我。 一般来讲,归一化就是减去数据平均值除以标准差,通常是针对每个输入和输出特征进行归一化。 需要归一化的首要...
基于MATLAB的神经网络训练程序源代码
这是一个独立开发的基于MATLAB的神经网络成序原代码。看懂程序后中间的数据是可以修改用于训练自己所需要的神经网络的。
MATLAB神经网络训练性能函数
MATLAB神经网络训练性能函数有: 方差、标准差(均方差): 均方误差(MSE)、均方根误差(RMSE): 均方根值(RMS): 平均绝对误差(MAE)、和方差(SSE)、绝对值和误差(SAE): 可使用命令:help nnperformance查看!
matlab印刷体神经网络训练数据集
印刷数字,总和10000张,7000训练,3000测试,还可以
神经网络的训练
如何训练: 既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective functio...
训练神经网络
<p>rn <span style="color:#3D3D3D;font-family:&quot;font-size:16px;background-color:#FFFFFF;"> </span> rn</p>rn<p>rn <p>rn 20周年限定:唐宇迪老师一卡通!<span style="color:#337FE5;">可学唐宇迪博士全部课程</span>,仅售799元(原价10374元),<span style="color:#E53333;">还送漫威授权机械键盘+CSDN 20周年限量版T恤+智能编程助手!</span>rn </p>rn <p>rn 点此链接购买:rn </p>rn <table>rn <tbody>rn <tr>rn <td>rn <a href="https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy" target="_blank"><span style="color:#337FE5;">https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy</span></a>rn </td>rn </tr>rn </tbody>rn </table>rn</p>rn<span style="color:#3D3D3D;font-family:&quot;font-size:16px;background-color:#FFFFFF;">购买课程后,可扫码进入学习群</span><span style="color:#3D3D3D;font-family:&quot;">,获取唐宇迪老师答疑</span> rn<p>rn <br />rn</p>rn<p>rn <img src="https://img-bss.csdn.net/201908070822056822.jpg" alt="" /> rn</p>rn<p>rn 深度学习框架Tensorflow案例实战视频培训课程概况:rnTensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。rn</p>
神经网络训练
学习了BP神经网络算法,刚开始最终要的一点不明白的就是前一层和后一层(这里指的只有三层,输入层,隐藏层,输出层)的权重,其实神经网络算法中,前一层的每一个节点和后一层的每一个节点都有连接权重,初始权重是随机的。而更新权重是通过输出层的值来反向更新的。基本过程如下: 1. 输入第一个训练样本(对应的就是输入层各个节点的值),根据初始随机权重和输入层到隐藏层的计算公式(这个公式在神经网络算法的文章中
神经网络--------训练
1.batch太大的和太小都不容易收敛。
RBF神经网络的训练 MATLAB源程序代码.rar
RBF神经网络模型的训练,数据预测 MATLAB源程序代码,含有训练数据和测试数据,可直接运行
RBF神经网络的训练 MATLAB源程序代码
RBF神经网络的训练 MATLAB源程序代码 RBF神经网络的训练 MATLAB源程序代码
基于MATLAB的BP神经网络的设计与训练.caj
基于MATLAB的BP神经网络的设计与训练 深入研究的看看
matlab 神经网络训练输入和输出问题
最近编了一个BP网络,用的是matlab ANN 工具箱,程序很简单,但是为什么说的我用的train的输入和输出samples不一样而报错? rnrn我的目的是训练一个2个输入一个输出,中间有一个隐藏层的BP神经网络。以下是程序截图和报错截图,rn求指导,我应该怎么train这个网络,具体应该怎么写,怎么调整数据。rnplus:我这有一个两列的输入和一列输出,其实就是每一组training pattern 是由两个数组成的,一共有121个training patterns。rn[img=https://img-bbs.csdn.net/upload/201503/20/1426825262_33565.jpg][/img][img=https://img-bbs.csdn.net/upload/201503/20/1426825270_140630.jpg][/img][img=https://img-bbs.csdn.net/upload/201503/20/1426825278_646524.png][/img]
matlab,神经网络训练中的nntraintool窗口性能
http://www.yanglajiao.com/article/xiaotao_1/79089316
基于MATLAB的BP神经网络的设计与训练
基于MATLAB的BP神经网络的设计与训练
matlab,详解神经网络训练中的nntraintool窗口
根据窗口,分为四个部分讲。后面小括号的灰色字是链接,可以点进去看。       1,Neural Network     这里显示的是输入大小,中间层数量以及每层的神经元个数。 2,Algorithms   Data Division:Random。这表示使用随机指数将目标分成三组,分别作为train,validation,test。   Training:RProp。这表示学习训练函数
MATLAB BP神经网络训练结果的解释
[img=https://img-bbs.csdn.net/upload/201703/14/1489469845_985034.png][/img]rn这图可以详细解释一下是什么意思吗?rn那个test和train重合才算是好的拟合吗?
在云服务器上训练自己的神经网络-tensorflow
一开始准备租用GPU服务器,但是这种方式有点类似于给你一台新电脑,上面什么软件都没有安装,需要自己去配置,配置比较麻烦,而且我在自己的windows平台下已经部署了cuda、cudnn等,有点怕冲突。 所以准备在专门的深度学习平台上进行训练。无需配置环境那种… 第一次尝试: PAI机器学习: 首先尝试了阿里的 PAI机器学习 可以运行且无需配置环境;但是这东西只支持到tensorflow1.4版本...
【深度学习与神经网络】tensorflow训练自己的分类模型
1. 准备训练用的图片集 因为我没有图片集,利用自动抓取百度图片的脚本。 # -*- coding: utf-8 -*- # @Time : 19-1-10 下午9:44 # @Author : Felix Wang import re import requests import json import random from multiprocessing import Pool ...
利用tensorflow训练自己的图片数据(4)——神经网络训练
一  . 说明 在上一篇博客——利用tensorflow训练自己的图片数据(3)中,我们建立好了本次训练的模型,接下来就是开始网络训练,并保存训练后的网络参数,以便测试时使用。 二 . 编程实现 #====================================================================== #导入文件 import os import nu
我自己写了一个TypeConverter,编译失败了
我自己写了一个小测试程序,试图把一个string类型转换成我想要的类型。如下所示:rn[code=csharp]rnusing System;rnusing System.Collections.Generic;rnusing System.Linq;rnusing System.Text;rnusing System.Threading.Tasks;rnusing System.ComponentModel;rnnamespace ConsoleApplication3rnrn public class StringToHumanTypeConverter : TypeConverterrn rn public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)rn rn return true;rn rn public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)rn rn if (value is string)rn rn Human h = new Human();rn h.Name = value as string;rn return h;rn rn return base.ConvertFrom(context, culture, value);rn rn rn [TypeConverter(typeof(StringToHumanTypeConverter))]rn public class Humanrn rn public string Name get; set; rn public Human Child get; set; rn rn class Programrn rn static void Main(string[] args)rn rn string v = "abc";rn Human h = (Human)v;rn rn rnrn[/code]rnVC#编译错误,提示在Human h=(Human)v;这一行,error CS0030: Cannot convert type 'string' to 'ConsoleApplication3.Human'rnrn这到底是怎么回事呢? 我在public class Human前面已经加上了TypeConverter这个Attribute了呀。rn请帮忙看看
神经网络训练:梯度下降训练策略
<p style="font-size:16px;">rn 本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。<br />rn<br />rn基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。<br />rn<br />rn本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。<br />rn<br />rn通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。<br />rn<br />rn本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。<br />rn<br />rn本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。rn</p>rn<div>rn <br />rn</div>rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>rn<p style="font-size:16px;">rn <br />rn</p>rn<p style="font-size:16px;">rn <img src="https://img-bss.csdn.net/201902211157137641.jpg" alt="" /><img src="https://img-bss.csdn.net/201902211157578041.gif" alt="" /><img src="https://img-bss.csdn.net/201902211158173579.gif" alt="" /><img src="https://img-bss.csdn.net/201902211158498135.gif" alt="" /><img src="https://img-bss.csdn.net/201902211159093293.gif" alt="" /><img src="https://img-bss.csdn.net/201902211159209625.gif" alt="" /> rn</p>rn<p style="font-size:16px;">rn <br />rn</p>
MATLAB神经网络-线性神经网络
这一份关于线性神经网络的教学视频,之前用来学习的资料,现在共享给大家学习。附带视频对应的pdf文档
机器学习-神经网络算法公式
利用前向传播算法和反向传播算法进行迭代训练神经网络。
神经网络的反向传播公式的推导
神经网络的反向传播公式的推导 前言: 早该开始入坑CNN,RNN的博主总觉得要先能用python加numpy手撸一个神经网络,才能更好理解其他神经网络的原理(强迫症)。于是…这一拖就是快两月(懒),最近填坑的时候才发现以为自己很通透的反向传播过程,写起代码推起来就…。 光看西瓜书觉得反向传播就是损失函数反向对每一层参数求偏导的过程。但西瓜书推导仅在三层网络上,各层参数符号定义也不统一(博主太笨)。...
神经网络反向传播公式的推导
最近在学习http://neuralnetworksanddeeplearning.com,一本详细介绍了neural networks and deep learning的书,作者写得深入浅出,全面透彻,是自学神经网络和深度学习的绝佳读物。 通过学习这本书,把之前从Stanford University公开课Machine Learning课程中学到的知识又巩固了一遍,以前一知半解的知识点,现
神经网络反向传播公式
神经网络模型   损失函数 前向传播 后向传播(推导见https://blog.csdn.net/Artprog/article/details/51397289) 训练参数
神经网络图解+公式
定义激活函数sigmoid()\text{sigmoid}\left( \right)sigmoid() g(z)=sigmoid(z)=(1+e−z)−1 g\left( z \right) =\text{sigmoid}\left( z \right) =\left( 1+e^{-z} \right) ^{-1} g(z)=sigmoid(z)=(1+e−z)−1 图中第2层为隐藏层,其各...
faster-rcnn安装配置,训练自己的数据,MATLAB,Ubuntu14
第一步:安装MATLAB2015a 配置GPU&&CUDA,如果只用CPU测试,则不需要,训练自己的数据需要配置GPU可以先了解faster-rcnn基本框架 http://blog.csdn.net/shenxiaolu1984/article/details/51152614 也可以查阅相关的其他博客。第二步: 下载源码https://github.com/ShaoqingRen/fas
神经网络反向传播(相关公式)
看了网上的帖子,写的很好,不过我还是想自己整理下,有的地方原来的博主还是有点散了,不过建议先看原博,然后在按照如下思路展开,不然可能有点跳跃。 自己认为下面的思路还是很清晰的,编辑公式就花了我好长时间啊。。。正向传播是为了计算net out的值 反向传播 (1)隐含层—-&amp;amp;gt;输出层∂Etotal∂W5=∂Etotal∂outo1∗∂outo1∂neto1∗∂neto1∂w5=δo1∗∂neto1
BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例
BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例BP神经网络Matlab实例
Matlab利用改进粒子群训练bp神经网络的matlab程序-利用改进粒子群训练bp神经网络的matlab程序.rar
Matlab利用改进粒子群训练bp神经网络的matlab程序-利用改进粒子群训练bp神经网络的matlab程序.rar 利用改进粒子群训练bp神经网络的matlab程序
matlab神经网络
matlab神经网络的ppt。包括神经网络的基础,BP,RBF,支持向量机等。
Matlab与神经网络
最近整理了关于Matlab的学习资料,这是第一个,关于神经网络工具箱,深度学习,以及人工神经网络的内容,包含25中人工神经网络的matlab代码实现,Matlab神经网络用户手册,面前Matlab工具箱的神经网络理论与应用,深度学习CNN+DBN+RBM等资料。
matlab 神经网络
matlab在神经网络的应用 基于Matlab的BP神经网络在大坝观测数据处理中的应用.pdf
MATLAB神经网络
&amp;#13; &amp;#13; &amp;#13; &amp;#13; &amp;#13; &amp;#13; &amp;#13; AI菌这几天沉迷于数模的AI菌来补发文章啦。深深地体会到虽然神经网络工具的API已经有了非常完备的封...
matlab和神经网络
matlab和神经网络 基本教程和一些简单方法介绍
神经网络 matlab
神经网络神经网络神经网络神经网络神经网络神经网络神经网络神经网络
相关热词 c# 线程顺序 c#昨天当前时间 c# 多进程 锁 c#mysql图片存取 c# ocx 委托事件 c# 读取类的属性和值 c# out 使用限制 c#获取url的id c#怎么进行分页查询 c# update 集合