导航:首页 > 网络安全 > 如何转移神经网络训练结果

如何转移神经网络训练结果

发布时间:2022-09-19 18:46:33

‘壹’ 在搭建神经网络的时候,如何选择合适的转移函数(

一般来说,神经网络的激励函数有以下几种:阶跃函数 ,准线性函数,双曲正切函数,Sigmoid函数等等,其中sigmoid函数就是你所说的S型函数。以我看来,在你训练神经网络时,激励函数是不轻易换的,通常设置为S型函数。如果你的神经网络训练效果不好,应从你所选择的算法上和你的数据上找原因。算法上BP神经网络主要有自适应学习速率动量梯度下降反向传播算法(traingdx),Levenberg-Marquardt反向传播算法(trainlm)等等,我列出的这两种是最常用的,其中BP默认的是后一种。数据上,看看是不是有误差数据,如果有及其剔除,否则也会影响预测或识别的效果。

‘贰’ 如何把训练好的神经网络保存下来

训练好网络后加上一句 save My-net net; 就可以啦。其中 My-net 是自己给网络命的名字。需要加载网络时采用 load My-net net;

‘叁’ 如何训练神经网络

1、先别着急写代码

训练神经网络前,别管代码,先从预处理数据集开始。我们先花几个小时的时间,了解数据的分布并找出其中的规律。

Andrej有一次在整理数据时发现了重复的样本,还有一次发现了图像和标签中的错误。所以先看一眼数据能避免我们走很多弯路。

由于神经网络实际上是数据集的压缩版本,因此您将能够查看网络(错误)预测并了解它们的来源。如果你的网络给你的预测看起来与你在数据中看到的内容不一致,那么就会有所收获。

一旦从数据中发现规律,可以编写一些代码对他们进行搜索、过滤、排序。把数据可视化能帮助我们发现异常值,而异常值总能揭示数据的质量或预处理中的一些错误。

2、设置端到端的训练评估框架

处理完数据集,接下来就能开始训练模型了吗?并不能!下一步是建立一个完整的训练+评估框架。

在这个阶段,我们选择一个简单又不至于搞砸的模型,比如线性分类器、CNN,可视化损失。获得准确度等衡量模型的标准,用模型进行预测。

这个阶段的技巧有:

· 固定随机种子

使用固定的随机种子,来保证运行代码两次都获得相同的结果,消除差异因素。

· 简单化

在此阶段不要有任何幻想,不要扩增数据。扩增数据后面会用到,但是在这里不要使用,现在引入只会导致错误。

· 在评估中添加有效数字

在绘制测试集损失时,对整个测试集进行评估,不要只绘制批次测试损失图像,然后用Tensorboard对它们进行平滑处理。

· 在初始阶段验证损失函数

验证函数是否从正确的损失值开始。例如,如果正确初始化最后一层,则应在softmax初始化时测量-log(1/n_classes)。

· 初始化

正确初始化最后一层的权重。如果回归一些平均值为50的值,则将最终偏差初始化为50。如果有一个比例为1:10的不平衡数据集,请设置对数的偏差,使网络预测概率在初始化时为0.1。正确设置这些可以加速模型的收敛。

· 人类基线

监控除人为可解释和可检查的损失之外的指标。尽可能评估人的准确性并与之进行比较。或者对测试数据进行两次注释,并且对于每个示例,将一个注释视为预测,将第二个注释视为事实。

· 设置一个独立于输入的基线

最简单的方法是将所有输入设置为零,看看模型是否学会从输入中提取任何信息。

· 过拟合一个batch

增加了模型的容量并验证我们可以达到的最低损失。

· 验证减少训练损失

尝试稍微增加数据容量。

‘肆’ 百度知道

为了训练的需要,要不然会出差错

1. 背景介绍

近些年来,随着Siri的走红,类似Siri、搜狗语音助手这样利用语音实现控制,语义理解的系统开始大量涌现。而语音识别系统作为这类系统的入口,很大程度上决定了这类应用的质量。没有一个好的语音识别系统做支撑,再好的助手也只能干瞪眼。

与此同时,随着微信的发展,越来越多的用户反馈,在多种场合下不方便收听语音,需要将语音转换成文字。许多微信公众号也表示需要将语音识别成文字,以便进一步的处理。在此形势下,提高我司现有语音识别系统的准确率成为了迫切的任务。

之前主流的语音识别系统都是采用HMM-GMM技术。近些年来,随着深度神经网络(Deep neural network)技术的的发展,越来越多的系统采用HMM-DNN技术。这项技术把描述特征发射概率的模型从混合高斯模型(GMM)替换为深度神经网络(DNN),从而使系统的错误率下降了20%~30%。

2. 相关产品

当前市场上的采用DNN技术的主要竞品有讯飞的相关产品,包括讯飞语音输入法和讯飞口讯等产品、以及某互联网公司的输入法等。

科大讯飞是当前语音行业的领航者,在语音行业有十几年的历史,在Siri推出前就已经推出了讯飞语音输入法等产品,在数据积累方面具有其他公司无法比拟的优势。而行业内另一家互联网公司则是声称国内最早将DNN技术应用到语音识别产品中的公司。

3. 技术介绍

3.1 深度神经网络

为了描述神经网络,我们先介绍最简单的神经网络,该神经网络只由一个神经元构成,如图1所示。

图1 神经元
图1所示的神经元接受3个输入,x1,x2,x3,和一个偏置+1, 其输出为

其中Wi 为xi在输入中的权重。函数f(x)被称作激活函数。

图2. 神经网络

神经网络将许多个单一的神经元连接在一起,如图2所示。神经网络最左边的一层叫做输入层,最右的一层叫做输出层。中间节点组成的一层叫做隐藏层.

3.2 深度神经网络在声学模型中的应用

深度神经网络则是层数较多的神经网络。虽然神经网络很早之前就已经提出,但因为计算量的问题,神经网络的层数一直无法提升。近年来随着神经网络理论的进一步发展和计算能力的不断提高,特别是GPU的出现,才使得深度神经网络得以发挥其威力。

图3. 使用DNN作为声学模型[1]

图3说明了DNN是如何替代GMM应用到声学模型中的。图3中上半部分是HMM的结构,HMM的结构和转移概率是HMM-GMM模型训练的结果。图3中间部分是描述了一个DNN,这个DNN模型来决定HMM的发射概率。通常情况下这个DNN模型的层数不会小于5层,每层大概数千个神经元组成。图3中的下半部分是DNN模型的输入,需要注意的是DNN模型的输入是多帧特征,而不是GMM模型中一帧。在识别语音的过程中,一小段语音都会被提取成上图中所对应的Observation,并根据HMM中的状态计算发射概率(也就是跟不同的发音比较相似度),选择发射概率最大路径作为最终的结果。

图4. DNN声学模型的训练流程

图4说明了DNN声学模型的训练流程。在训练DNN模型之前,我们首先训练出一个HMM-GMM模型来做强制对齐(forced alignment)。强制对齐的结果作为DNN训练的样本提交GPU上训练DNN模型,这个过程包含了两部分,首先是基于GPU的Pretrain,使神经网络有一个好的起点。然后使用BP算法对神经网络进行Fine Tuning,得到最终的模型。

3.3 DNN训练与识别系统的工程优化

DNN网络具有数据巨大的参数需要学习,每一层网络都有数百万的参数,而下一层网络的输入又是上一层网络的输出,通常情况下训练一个3.2节中所述的声学模型需要近两千个CPU内核运行近一个月。此外,由于声学模型所用到的DNN较为特殊:每一层的一个神经元都依赖上一层的所有神经元,因此,如果把模型不同层次切分到不同的服务器上分别进行训练的话,会带来巨大的网络开销,使系统实际上不可用,因此我们在训练DNN的过程中使用了GPU,并通过不断的优化,使得训练速度相比单台服务器有近两千倍的速度提高,从而使DNN模型的训练成为现实。

此外,为了使DNN模型可以应用到线上的服务中,我们对DNN在CPU上的计算也做了优化,在几乎不影响准确率的情况下,将计算速度提升了将近10倍。

4. 实验结果

通过DNN模型的应用,我们语音识别系统的字错误率下降了40%左右,根据第三方的测试已经超过网络,并有望追上讯飞。

‘伍’ 神经网络,训练样本过多,怎样先用一组数据训练后再用另一组数据训练(在上组数据训练结果的基础上)

继承权重啊。
但是这样的话新训练的权重对于旧的数据是无效的。

‘陆’ 如何把电脑训练好的神经网络移植到app上

这个要重新编写程序了。如果你的电脑的程序与手机的APP程序不兼容就没法了。还是就是如果匹配了那些文件一般要写入APP程序的某个文件里,首先你要找到你电脑程序写入的文件,然后在复制到手机APP的程序写入的地方方便读取就可以了

‘柒’ 如何让利用神经网络进行预测,怎么在进行训练之后,怎么看出训练模型的好坏如何进行评判

可以用MATLAB神经网络工具箱,先提取样本,用mapminmax函数归一化,再newff函数建立网络,设置好训练参数后,使用train函数训练,最后用sim函数看预测结果。

在训练过程中,有一个performance可以观察,它的训练目标就是你设置的goal。在训练过程中,它会自动分出一部分样本作为validation验证,可以保证不过拟合。具体要评价效果还是应该看最后预测的精度。

附件是一个BP预测的实例。

‘捌’ 怎么把在matlab中训练好的BP神经网络移植到单片机上进行数据实时监测分类

一般是单片机采集数据,中央超级计算机进行数据处理和分类

‘玖’ BP神经网络如何把训练后的权值输入至MATLAB 建立网络 完成预测

这个就只能自己编M文件实现了,给个例子你看看

% script: main_batch.m
% 批量方式训练BP网络,实现性别识别

%% 清理
clear all
clc

%% 读入数据
% xlsfile='student.xls';
[data,label]=getdata();

%% 划分数据
[traind,trainl,testd,testl]=divide(data,label);

%% 设置参数

rng('default')
rng(0)
nTrainNum = 60; % 60个训练样本
nSampDim = 2; % 样本是2维的

%% 构造网络
net.nIn = 2; % 输入层2个神经元,分别输入身高、体重
net.nHidden = 3; % 3个隐含层节点
net.nOut = 1; % 1个输出层节点
w = 2*(rand(net.nHidden,net.nIn)-1/2); % nHidden * 3 一行代表一个隐含层节点
b = 2*(rand(net.nHidden,1)-1/2);
net.w1 = [w,b];
W = 2*(rand(net.nOut,net.nHidden)-1/2);
B = 2*(rand(net.nOut,1)-1/2);
net.w2 = [W,B];

%% 训练数据归一化
mm=mean(traind);
% 均值平移
for i=1:2
traind_s(:,i)=traind(:,i)-mm(i);
end
% 方差标准化
ml(1) = std(traind_s(:,1));
ml(2) = std(traind_s(:,2));
for i=1:2
traind_s(:,i)=traind_s(:,i)/ml(i);
end

%% 训练
SampInEx = [traind_s';ones(1,nTrainNum)];
expectedOut=trainl;

eb = 0.01; % 误差容限
eta = 0.6; % 学习率
mc = 0.8; % 动量因子
maxiter = 2000; % 最大迭代次数
iteration = 0; % 第一代

errRec = zeros(1,maxiter);
outRec = zeros(nTrainNum, maxiter);
NET=[]; % 记录
% 开始迭代
for i = 1 : maxiter
hid_input = net.w1 * SampInEx; % 隐含层的输入
hid_out = logsig(hid_input); % 隐含层的输出

ou_input1 = [hid_out;ones(1,nTrainNum)]; % 输出层的输入
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2); % 输出层的输出

outRec(:,i) = out_out'; % 记录每次迭代的输出

err = expectedOut - out_out; % 误差
sse = sumsqr(err);
errRec(i) = sse; % 保存误差值
fprintf('第 %d 次迭代 误差: %f\n', i, sse);
iteration = iteration + 1;
% 判断是否收敛
if sse<=eb
break;
end

% 误差反向传播
% 隐含层与输出层之间的局部梯度
DELTA = err.*dlogsig(ou_input2,out_out);
% 输入层与隐含层之间的局部梯度
delta = net.w2(:,1:end-1)' * DELTA.*dlogsig(hid_input,hid_out);

% 权值修改量
dWEX = DELTA*ou_input1';
dwex = delta*SampInEx';

% 修改权值,如果不是第一次修改,则使用动量因子
if i == 1
net.w2 = net.w2 + eta * dWEX;
net.w1 = net.w1 + eta * dwex;
else
net.w2 = net.w2 + (1 - mc)*eta*dWEX + mc * dWEXOld;
net.w1 = net.w1 + (1 - mc)*eta*dwex + mc * dwexOld;
end
% 记录上一次的权值修改量
dWEXOld = dWEX;
dwexOld = dwex;

end

%% 测试
% 测试数据归一化
for i=1:2
testd_s(:,i)=testd(:,i)-mm(i);
end

for i=1:2
testd_s(:,i)=testd_s(:,i)/ml(i);
end

% 计算测试输出
InEx=[testd_s';ones(1,260-nTrainNum)];
hid_input = net.w1 * InEx;
hid_out = logsig(hid_input); % output of the hidden layer nodes
ou_input1 = [hid_out;ones(1,260-nTrainNum)];
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2);
out_out1=out_out;

% 取整
out_out(out_out<0.5)=0;
out_out(out_out>=0.5)=1;
% 正确率
rate = sum(out_out == testl)/length(out_out);

%% 显示
% 显示训练样本
train_m = traind(trainl==1,:);
train_m=train_m';
train_f = traind(trainl==0,:);
train_f=train_f';
figure(1)
plot(train_m(1,:),train_m(2,:),'bo');
hold on;
plot(train_f(1,:),train_f(2,:),'r*');
xlabel('身高')
ylabel('体重')
title('训练样本分布')
legend('男生','女生')

figure(2)
axis on
hold on
grid
[nRow,nCol] = size(errRec);
plot(1:nCol,errRec,'LineWidth',1.5);
legend('误差平方和');
xlabel('迭代次数','FontName','Times','FontSize',10);
ylabel('误差')

fprintf(' ----------------错误分类表----------\n')
fprintf(' 编号 标签 身高 体重\n')
ind= find(out_out ~= testl);
for i=1:length(ind)
fprintf(' %4d %4d %f %f \n', ind(i), testl(ind(i)), testd(ind(i),1), testd(ind(i),2));
end

fprintf('最终迭代次数\n %d\n', iteration);
fprintf('正确率:\n %f%%\n', rate*100);

阅读全文

与如何转移神经网络训练结果相关的资料

热点内容
网络连接显示失败651是哪里的问题 浏览:751
160wifi共享网络怎么设置 浏览:933
已连接移动网络也没有位置信息 浏览:954
移动光猫复位以后怎么没网络了 浏览:638
香港免费无线网络 浏览:796
把网络安全写在物品上 浏览:550
100兆的网络用哪种wifi接收器好 浏览:511
苹果4g怎么伪装5g网络 浏览:24
什么是4k液晶网络版 浏览:538
苹果美版网络锁官解得多久 浏览:259
网络插头哪个是数据线 浏览:248
无线路由器信号强但网络差 浏览:955
移动网络猫的维修方法 浏览:548
小米8蓝牙共享网络怎么用 浏览:78
国安网络信息怎么保护 浏览:944
网络诈骗案打电话判多少年 浏览:298
xp启用无线网络连接 浏览:946
网络拆机拆错了怎么办 浏览:45
联通关闭网络异常提醒 浏览:114
网络增加共享计算机 浏览:112

友情链接