導航:首頁 > 網路問題 > 如何手動計算線性神經網路模型

如何手動計算線性神經網路模型

發布時間: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
中級配置台式電腦 瀏覽:1011
中國網路安全的戰士 瀏覽:637
同志網站在哪裡 瀏覽:1420
版觀看完整完結免費手機在線 瀏覽:1464
怎樣切換默認數據網路設置 瀏覽:1113
肯德基無線網無法訪問網路 瀏覽:1290
光纖貓怎麼連接不上網路 瀏覽:1495
神武3手游網路連接 瀏覽:969
局網列印機網路共享 瀏覽:1005