导航:首页 > 网络问题 > 如何手动计算线性神经网络模型

如何手动计算线性神经网络模型

发布时间:2022-09-03 02:04:53

㈠ 如何在R语言中进行神经网络模型的建立

不能发链接,所以我复制过来了。

#载入程序和数据
library(RSNNS)
data(iris)
#将数据顺序打乱
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定义网络输入
irisValues <- iris[,1:4]
#定义网络输出,并将数据进行格式转换
irisTargets <- decodeClassLabels(iris[,5])
#从中划分出训练样本和检验样本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#数据标准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令执行前馈反向传播神经网络算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型进行预测
predictions <- predict(model,iris$inputsTest)
#生成混淆矩阵,观察预测精度
confusionMatrix(iris$targetsTest,predictions)
#结果如下:
# predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10

㈡ 机器学习之人工神经网络算法

机器学习中有一个重要的算法,那就是人工神经网络算法,听到这个名称相信大家能够想到人体中的神经。其实这种算法和人工神经有一点点相似。当然,这种算法能够解决很多的问题,因此在机器学习中有着很高的地位。下面我们就给大家介绍一下关于人工神经网络算法的知识。
1.神经网络的来源
我们听到神经网络的时候也时候近一段时间,其实神经网络出现有了一段时间了。神经网络的诞生起源于对大脑工作机理的研究。早期生物界学者们使用神经网络来模拟大脑。机器学习的学者们使用神经网络进行机器学习的实验,发现在视觉与语音的识别上效果都相当好。在BP算法诞生以后,神经网络的发展进入了一个热潮。
2.神经网络的原理
那么神经网络的学习机理是什么?简单来说,就是分解与整合。一个复杂的图像变成了大量的细节进入神经元,神经元处理以后再进行整合,最后得出了看到的是正确的结论。这就是大脑视觉识别的机理,也是神经网络工作的机理。所以可以看出神经网络有很明显的优点。
3.神经网络的逻辑架构
让我们看一个简单的神经网络的逻辑架构。在这个网络中,分成输入层,隐藏层,和输出层。输入层负责接收信号,隐藏层负责对数据的分解与处理,最后的结果被整合到输出层。每层中的一个圆代表一个处理单元,可以认为是模拟了一个神经元,若干个处理单元组成了一个层,若干个层再组成了一个网络,也就是”神经网络”。在神经网络中,每个处理单元事实上就是一个逻辑回归模型,逻辑回归模型接收上层的输入,把模型的预测结果作为输出传输到下一个层次。通过这样的过程,神经网络可以完成非常复杂的非线性分类。
4.神经网络的应用。
图像识别领域是神经网络中的一个着名应用,这个程序是一个基于多个隐层构建的神经网络。通过这个程序可以识别多种手写数字,并且达到很高的识别精度与拥有较好的鲁棒性。可以看出,随着层次的不断深入,越深的层次处理的细节越低。但是进入90年代,神经网络的发展进入了一个瓶颈期。其主要原因是尽管有BP算法的加速,神经网络的训练过程仍然很困难。因此90年代后期支持向量机算法取代了神经网络的地位。
在这篇文章中我们大家介绍了关于神经网络的相关知识,具体的内容就是神经网络的起源、神经网络的原理、神经网络的逻辑架构和神经网络的应用,相信大家看到这里对神经网络知识有了一定的了解,希望这篇文章能够帮助到大家。

㈢ 如何建立神经网络模型

人工神经网络有很多种,我只会最常用的BP神经网络。不同的网络有不同的结构和不同的学习算法。
简单点说,人工神经网络就是一个函数。只是这个函数有别于一般的函数。它比普通的函数多了一个学习的过程。
在学习的过程中,它根据正确结果不停地校正自己的网络结构,最后达到一个满意的精度。这时,它才开始真正的工作阶段。
学习人工神经网络最好先安装MathWords公司出的MatLab软件。利用该软件,你可以在一周之内就学会建立你自己的人工神经网络解题模型。
如果你想自己编程实现人工神经网络,那就需要找一本有关的书籍,专门看神经网络学习算法的那部分内容。因为“学习算法”是人工神经网络的核心。最常用的BP人工神经网络,使用的就是BP学习算法。

㈣ 急问求助。用spss我已经分析好了神经网络模型。如何调用它,输如其他因变量,输出自变量的值

  1. 你说错了吧? 应该是输入自变量,输出因变量。

  2. 如果你想在当前打开的文件中,再输入数据,进行预测值的输出,应该先输入好自变量,保持因变量字段空缺,再进行一次分析模型(参数不要做任何改变)。

  3. 如果你是想在新的文件中进行预测,那就先把模型导出为xml文件。然后打开新数据,然后在‘实用程序’下的菜单栏里点击'评分向导',把原先保存下来的xml文件导入进来,进行预测。--这个做法和其他模型的使用是一样的。

㈤ 如何用神经网络做线性回归预测python

1:神经网络算法简介
2:Backpropagation算法详细介绍
3:非线性转化方程举例
4:自己实现神经网络算法NeuralNetwork
5:基于NeuralNetwork的XOR实例
6:基于NeuralNetwork的手写数字识别实例
7:scikit-learn中BernoulliRBM使用实例
8:scikit-learn中的手写数字识别实例

㈥ MATLAB线性神经网络的程序,跪求。。

美国Michigan 大学的 Holland 教授提出的遗传算法(GeneticAlgorithm, GA)是求解复杂的组合优化问题的有效方法 ,其思想来自于达尔文进化论和门德尔松遗传学说 ,它模拟生物进化过程来从庞大的搜索空间中筛选出较优秀的解,是一种高效而且具有强鲁棒性方法。所以,遗传算法在求解TSP和 MTSP问题中得到了广泛的应用。

matlab程序如下:

function[opt_rte,opt_brk,min_dist] =mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter)

%%

%实例

% n = 20;%城市个数

% xy = 10*rand(n,2);%城市坐标 随机产生,也可以自己设定

% salesmen = 5;%旅行商个数

% min_tour = 3;%每个旅行商最少访问的城市数

% pop_size = 80;%种群个数

% num_iter = 200;%迭代次数

% a = meshgrid(1:n);

% dmat =reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),n,n);

% [opt_rte,opt_brk,min_dist] = mtspf_ga(xy,dmat,salesmen,min_tour,...

% pop_size,num_iter);%函数

%%

[N,dims]= size(xy); %城市矩阵大小

[nr,nc]= size(dmat); %城市距离矩阵大小

n = N -1;% 除去起始的城市后剩余的城市的数

% 初始化路线、断点的选择

num_brks= salesmen-1;

dof = n- min_tour*salesmen; %初始化路线、断点的选择

addto =ones(1,dof+1);

for k =2:num_brks

addto = cumsum(addto);

end

cum_prob= cumsum(addto)/sum(addto);

%% 初始化种群

pop_rte= zeros(pop_size,n); % 种群路径

pop_brk= zeros(pop_size,num_brks); % 断点集合的种群

for k =1:pop_size

pop_rte(k,:) = randperm(n)+1;

pop_brk(k,:) = randbreaks();

end

% 画图路径曲线颜色

clr =[1 0 0; 0 0 1; 0.67 0 1; 0 1 0; 1 0.5 0];

ifsalesmen > 5

clr = hsv(salesmen);

end

%%

% 基于遗传算法的MTSP

global_min= Inf; %初始化最短路径

total_dist= zeros(1,pop_size);

dist_history= zeros(1,num_iter);

tmp_pop_rte= zeros(8,n);%当前的路径设置

tmp_pop_brk= zeros(8,num_brks); %当前的断点设置

new_pop_rte= zeros(pop_size,n);%更新的路径设置

new_pop_brk= zeros(pop_size,num_brks);%更新的断点设置

foriter = 1:num_iter

% 计算适应值

for p = 1:pop_size

d = 0;

p_rte = pop_rte(p,:);

p_brk = pop_brk(p,:);

rng = [[1 p_brk+1];[p_brk n]]';

for s = 1:salesmen

d = d + dmat(1,p_rte(rng(s,1)));% 添加开始的路径

for k = rng(s,1):rng(s,2)-1

d = d + dmat(p_rte(k),p_rte(k+1));

end

d = d + dmat(p_rte(rng(s,2)),1); % 添加结束的的路径

end

total_dist(p) = d;

end

% 找到种群中最优路径

[min_dist,index] = min(total_dist);

dist_history(iter) = min_dist;

if min_dist < global_min

global_min = min_dist;

opt_rte = pop_rte(index,:); %最优的最短路径

opt_brk = pop_brk(index,:);%最优的断点设置

rng = [[1 opt_brk+1];[opt_brk n]]';%设置记录断点的方法

figure(1);

for s = 1:salesmen

rte = [1 opt_rte(rng(s,1):rng(s,2))1];

plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:));

title(sprintf('城市数目为 = %d,旅行商数目为 = %d,总路程 = %1.4f, 迭代次数 =%d',n+1,salesmen,min_dist,iter));

hold on

grid on

end

plot(xy(1,1),xy(1,2),'ko');

hold off

end

% 遗传操作

rand_grouping = randperm(pop_size);

for p = 8:8:pop_size

rtes = pop_rte(rand_grouping(p-7:p),:);

brks = pop_brk(rand_grouping(p-7:p),:);

dists =total_dist(rand_grouping(p-7:p));

[ignore,idx] = min(dists);

best_of_8_rte = rtes(idx,:);

best_of_8_brk = brks(idx,:);

rte_ins_pts = sort(ceil(n*rand(1,2)));

I = rte_ins_pts(1);

J = rte_ins_pts(2);

for k = 1:8 %产生新种群

tmp_pop_rte(k,:) = best_of_8_rte;

tmp_pop_brk(k,:) = best_of_8_brk;

switch k

case 2% 倒置操作

tmp_pop_rte(k,I:J) =fliplr(tmp_pop_rte(k,I:J));

case 3 % 互换操作

tmp_pop_rte(k,[I J]) =tmp_pop_rte(k,[J I]);

case 4 % 滑动平移操作

tmp_pop_rte(k,I:J) =tmp_pop_rte(k,[I+1:J I]);

case 5% 更新断点

tmp_pop_brk(k,:) = randbreaks();

case 6 % 倒置并更新断点

tmp_pop_rte(k,I:J) =fliplr(tmp_pop_rte(k,I:J));

tmp_pop_brk(k,:) =randbreaks();

case 7 % 互换并更新断点

tmp_pop_rte(k,[I J]) =tmp_pop_rte(k,[J I]);

tmp_pop_brk(k,:) =randbreaks();

case 8 % 评议并更新断点

tmp_pop_rte(k,I:J) =tmp_pop_rte(k,[I+1:J I]);

tmp_pop_brk(k,:) =randbreaks();

otherwise

end

end

new_pop_rte(p-7:p,:) = tmp_pop_rte;

new_pop_brk(p-7:p,:) = tmp_pop_brk;

end

pop_rte = new_pop_rte;

pop_brk = new_pop_brk;

end

figure(2)

plot(dist_history,'b','LineWidth',2);

title('历史最优解');

xlabel('迭代次数')

ylabel('最优路程')

% 随机产生一套断点 的集合

function breaks = randbreaks()

if min_tour == 1 % 一个旅行商时,没有断点的设置

tmp_brks = randperm(n-1);

breaks =sort(tmp_brks(1:num_brks));

else % 强制断点至少找到最短的履行长度

num_adjust = find(rand <cum_prob,1)-1;

spaces =ceil(num_brks*rand(1,num_adjust));

adjust = zeros(1,num_brks);

for kk = 1:num_brks

adjust(kk) = sum(spaces == kk);

end

breaks = min_tour*(1:num_brks) +cumsum(adjust);

end

end

disp('最优路径为:/n')

disp(opt_rte);

disp('其中断点为为:/n')

disp(opt_brk);

end


㈦ 如何用MATLAB神经网络工具箱创建BP神经网络模型

1. 常用的前馈型BP网络的转移函数有logsig,tansig,有时也会用到线性函数purelin。当网络的最后一层采用曲线函数时,输出被限制在一个很小的范围内,如果采用线性函数则输出可为任意值。以上三个函数是BP网络中最常用到的函数,但是如果需要的话你也可以创建其他可微的转移函数。
2. 在BP网络中,转移函数可求导是非常重要的,tansig、logsig和purelin都有对应的导函数dtansig、dlogsig和dpurelin。为了得到更多转移函数的导函数,可以带字符"deriv"的转移函数:tansig('deriv')

㈧ 2.搭建一个神经网络模型训练MNIST手写体数字数据集中遇到的问题及解决方法

批量输入后,如何使用numpy矩阵计算的方法计算各权值梯度,提高计算速度

def backprop(self, x, y): #x为多维矩阵。每列为一个x值。 y为多维矩阵。每列为一个y值。

batch_num=x.shape[1]

#print(x.shape)

#print(y.shape)

"""创建两个变量,用来存储所有b值和所有w值对应的梯度值。初始化为0.nabla_b为一个list,形状与biases的形状完全一致。nabla_w 为一个list,形状与weights的形状完全一致。

"""

nabla_b = [np.zeros(b.shape) for b in self.biases]

nabla_w = [np.zeros(w.shape) for w in self.weights]

# feedforward

"""activations,用来所有中间层和输出层在一次前向计算过程中的最终输出值,即a值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。

"""

activation = x #x为本批多个x为列组成的矩阵。

activations = [x] # list to store all the activations, layer by layer

"""zs,用来所有中间层和输出层在一次前向计算过程中的线性输出值,即z值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。

"""

zs = [] # list to store all the z vectors, layer by layer ,zs的每个元素为本batch的x对应的z为列构成的矩阵。


"""

通过一次正向计算,将中间层和输出层所有的z值和a值全部计算出来,并存储起来。供接下来求梯度使用。

"""

for b, w in zip(self.biases, self.weights):

#print(w.shape)

#print(np.dot(w, activation).shape)

#print(b.shape)

z = np.dot(w, activation)+b #z为本batch的x对应的z为列构成的矩阵。

zs.append(z)

activation = sigmoid(z)

activations.append(activation)


"""

以下部分是采用BP算法求解每个可训练参数的计算方法。是权重更新过程中的关键。

"""

# backward pass

# 求出输出层的delta值

delta = ((activations[-1]-y) * sigmoid_prime(zs[-1]))

nabla_b[-1] = delta.mean(axis=1).reshape(-1, 1)

nabla_w[-1] =np.dot(delta,activations[-2].transpose())/batch_num

# Note that the variable l in the loop below is used a little

# differently to the notation in Chapter 2 of the book. Here,

# l = 1 means the last layer of neurons, l = 2 is the

# second-last layer, and so on. It's a renumbering of the

# scheme in the book, used here to take advantage of the fact

# that Python can use negative indices in lists.

for l in range(2, self.num_layers):

z = zs[-l]

sp = sigmoid_prime(z)

delta = (np.dot(self.weights[-l+1].transpose(), delta) * sp)

nabla_b[-l] = delta.mean(axis=1).reshape(-1, 1)

nabla_w[-l] =np.dot(delta,activations[-l-1].transpose())/batch_num

return (nabla_b, nabla_w)


##梯度计算后,如何更新各权值


def update_mini_batch(self, mini_batch, eta):

"""Update the network's weights and biases by applying

gradient descent using backpropagation to a single mini batch.

The ``mini_batch`` is a list of tuples ``(x, y)``, and ``eta``

is the learning rate."""

""" 初始化变量,去存储各训练参数的微分和。

"""

nabla_b = [np.zeros(b.shape) for b in self.biases]

nabla_w = [np.zeros(w.shape) for w in self.weights]

""" 循环获取batch中的每个数据,获取各训练参数的微分,相加后获得各训练参数的微分和。

"""

x_batch=None

y_batch=None

for x, y in mini_batch:

if( x_batch is None):

x_batch=x

else:

x_batch=np.append(x_batch,x,axis=1)

if( y_batch is None):

y_batch=y

else:

y_batch=np.append(y_batch,y,axis=1)

delta_nabla_b, delta_nabla_w = self.backprop(x_batch, y_batch)

nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]

nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

""" 使用各训练参数的平均微分和与步长的乘积,去更新每个训练参数

"""

self.weights = [w-eta*nw

for w, nw in zip(self.weights, nabla_w)]

self.biases = [b-eta*nb

for b, nb in zip(self.biases, nabla_b)]

㈨ 求人工神经网络的具体算法,数学模型,比如求一个函数最优值之类的,不要各种乱七八糟的介绍,谢谢

神经网络就像多项式或者线性模型一样,是个看不见表达式的模型,它的表达式就是网络,它比一般模型具有更高的自由度和弹性;同时它是一个典型的黑箱模型方法;比多项式等模型还黑。优化算法,就是寻优的算法,所谓寻优过程,就是寻找使目标函数最小时(都是统一表示成寻找使函数具有最小值)的自变量的值。回归或者拟合一个模型,例如用一个多项式模型去拟合一组数据,其本质就是寻找使残差平方和最小的参数值,这就是一个寻优的过程,其实就是寻找使函数F(x)值最小时的x的值;对于这个具体的寻找过程就涉及到算法问题,就是如何计算。所谓算法,是数值分析的一个范畴,就是解这问题的方法;例如一个一元二次方程 x^2-3x+1=0的解法,因为简单可以直接求解,也可以用牛顿逐个靠近的方法求解,也即是迭代,慢慢接近真实解,如此下去不断接近真值,要注意迭代算法是涉及算法精度的,这些迭代算法是基于计算机的,算法的初衷也是用近似的算法用一定的精度来接近真实值。 比如上面的方程也可以用遗传算法来解,可以从一些初始值最终迭代到最佳解。神经网络在寻找网络的参数即权值的时候,也有寻找使训练效果最好的过程,这也是寻优的过程,这里涉及到了算法就是所谓的神经网络算法,这和最小二乘算法是一样的道理;例如做响应面的时候,其实就是二次回归,用最小二乘得到二次模型的参数,得到一个函数,求最大产物量就是求函数模型的最大值,怎么算呢?顶点处如果导数为0,这个地方对应的x值就是最优的,二次模型简单可以用偏导数=0来直接解决,这过程也可以遗传算法等来解决。说到底所谓寻优的本质就是,寻找函数极值处对应的自变量的值。

阅读全文

与如何手动计算线性神经网络模型相关的资料

热点内容
网络共享中心没有网卡 浏览:527
电脑无法检测到网络代理 浏览:1376
笔记本电脑一天会用多少流量 浏览:593
苹果电脑整机转移新机 浏览:1380
突然无法连接工作网络 浏览:1075
联通网络怎么设置才好 浏览:1230
小区网络电脑怎么连接路由器 浏览:1052
p1108打印机网络共享 浏览:1215
怎么调节台式电脑护眼 浏览:715
深圳天虹苹果电脑 浏览:951
网络总是异常断开 浏览:617
中级配置台式电脑 浏览:1010
中国网络安全的战士 浏览:637
同志网站在哪里 浏览:1420
版观看完整完结免费手机在线 浏览:1464
怎样切换默认数据网络设置 浏览:1113
肯德基无线网无法访问网络 浏览:1290
光纤猫怎么连接不上网络 浏览:1494
神武3手游网络连接 浏览:969
局网打印机网络共享 浏览:1005