Ⅰ 神經網路怎麼把正確和錯誤數據集分開訓練
1. 輸入特徵最好不相關。如果某些維輸入的相關性太強,那麼網路中與這些輸入神經元相連的權重實際上起到的作用就是相似的,訓練網路時花在調整這些權重之間關繫上的力氣就白費了。
2. 上面說的輸入的相關是指所有訓練數據某些維度上相關,而不是說某些訓練數據在所有維度上相關。在你舉的例子中,如果相似數據都非常接近,那麼這些數據其實是冗餘的,可以去掉一部分;如果相似數據之間的方差足夠大,那麼這種方差就能增強模型的魯棒性。
3. 如果你不使用minibatch,那麼沒有影響。
4. 需要歸一化,否則訓練過程中容易遇到數值上的困難。
Ⅱ BP神經網路數據分類總出錯。
你的數據矩陣的組織出問題了,你設置的網路輸入神經元和你每次輸入的數據這塊有矛盾,可以嘗試先再減少數據量去做,這里有可能用到轉職,然後再加大數據量,這樣去組織數據
Ⅲ 關於BP神經網路出現的錯誤要怎麼解決啊,急!急!急!
你在工作路徑下也有個u.m的文件與系統沖突了
Ⅳ 關於用bp神經網路做分類時,指標的篩選問題
把指標差異不顯著的變數加入到特徵中不會有任何意義,只會白白增加訓練時間而已。
Ⅳ 如何刪除神經網路樣本中的預測誤差較大的樣本
樣本變數不需要那麼多,因為神經網路的信息存儲能力有限,過多的樣本會造成一些有用的信息被丟棄。如果樣本數量過多,應增加隱層節點數或隱層數目,才能增強學習能力。
一、隱層數
一般認為,增加隱層數可以降低網路誤差(也有文獻認為不一定能有效降低),提高精度,但也使網路復雜化,從而增加了網路的訓練時間和出現「過擬合」的傾向。一般來講應設計神經網路應優先考慮3層網路(即有1個隱層)。一般地,靠增加隱層節點數來獲得較低的誤差,其訓練效果要比增加隱層數更容易實現。對於沒有隱層的神經網路模型,實際上就是一個線性或非線性(取決於輸出層採用線性或非線性轉換函數型式)回歸模型。因此,一般認為,應將不含隱層的網路模型歸入回歸分析中,技術已很成熟,沒有必要在神經網路理論中再討論之。
二、隱層節點數
在BP 網路中,隱層節點數的選擇非常重要,它不僅對建立的神經網路模型的性能影響很大,而且是訓練時出現「過擬合」的直接原因,但是目前理論上還沒有一種科學的和普遍的確定方法。 目前多數文獻中提出的確定隱層節點數的計算公式都是針對訓練樣本任意多的情況,而且多數是針對最不利的情況,一般工程實踐中很難滿足,不宜採用。事實上,各種計算公式得到的隱層節點數有時相差幾倍甚至上百倍。為盡可能避免訓練時出現「過擬合」現象,保證足夠高的網路性能和泛化能力,確定隱層節點數的最基本原則是:在滿足精度要求的前提下取盡可能緊湊的結構,即取盡可能少的隱層節點數。研究表明,隱層節點數不僅與輸入/輸出層的節點數有關,更與需解決的問題的復雜程度和轉換函數的型式以及樣本數據的特性等因素有關。
Ⅵ 訓練好的神經網路怎麼分類未知數據
神經網路本來就是用於對沒有訓練過的數據的分類的。關鍵要看你的訓練樣本和你的實際數據的特點是否一致,越一致識別的效果越好,如果不好,你要考慮換選取的訓練數據的樣本了。
Ⅶ 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)]
Ⅷ 我想用神經網路演算法將設備正常運行時候的各項參數的數據和中間一段時間出過故障的數據進行比對,找出故障
你可以將數據,作為輸入,正常時輸出0,故障時輸出1, 這樣去訓練,若果能把網路訓練好的話,最後你輸入一組新數據的時候,就知道它是正常還是不正常的了。
具體怎麼實現,這里也說不了。 下面給個例子你去看看,跟你的情況比較像。
不能發鏈接,我處理了一下,你照著看看。
ht據說網路不能發鏈接tp://據說網路不能發鏈接nnetinfo.c據說網路不能發鏈接om/nninfo/showTe據說網路不能發鏈接xt.jsp?id=19
希望能幫到你。 解決了你的問題的話幫我點個贊。