簡體   English   中英

在python中的神經網絡中訓練數據時出現斷言錯誤?

[英]Getting Assertion Error when training data in neural network in python?

我有一個包含數據的文件BCICIV1bAF3.dat 檔案大小為20x1

這是我的代碼...

在newff函數中,我根據最小/最大確定范圍,但是我不知道如何確定其他參數。 我要多少隱藏層等

import numpy as np
import neurolab as nl

input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float)

print(len(input_data))
transformed_input_data = [[x] for x in input_data] # added
print(len(transformed_input_data))
output_data = np.fromfile('test.dat',dtype=float)

transformed_output_data = [[x] for x in output_data] # added

net = nl.net.newff([[-21, -10.5]], [1020, 1])
error = net.train(transformed_input_data, transformed_output_data)
predicted_output = net.sim(input_data)

輸入數據:

-10.5 -91.7 -219.8 -227 -190.8 -218.7 -208.2 -205 -214.3 -202 -211.5 -211.1 -208.2 -212.4 -206 -206.7 -211.5 -210.7 -212 -215.1

輸出數據:

-5.2 -45.6 -108.6 -112 -94.5 -106.7 -99.6 -98.5 -105.4 -101.2 -106.4 -106.5 -102.4 -105.7 -104 -97.9 -99.5 -101.3 -100.6 -103.7

錯誤:

Traceback (most recent call last):
  File "NNwork2.py", line 15, in <module>

     error = net.train(transformed_input_data, transformed_output_data)
  File "C:\Python34\lib\site-packages\neurolab\core.py", line 328, in __call__
    assert target.shape[0] == input.shape[0]
AssertionError

我該如何訓練? 並模擬input_data?

如果有人可以指導...我將不勝感激。 謝謝

您是否嘗試了其他培訓方法? 我在其他答案中看到它有所幫助,因為庫中存在錯誤。 可用方法: train_gd, train_gdm, train_gda, train_gdx, train_rprop, train_bfgs (DEFAULT), train_cg

您可以通過以下方式進行更改:

net.trainf = nl.train.train_gd

如果您可以提供輸入數據(即使更改了值),那就太好了。

我嘗試以以下格式調用輸入的訓練方法: [0,1,2,3...18,19] ,但失敗了-我不得不將輸入(和目標)更改為[[0],[1],...[18],[19]]

編輯:

您的數據格式錯誤,應將其轉換為列表列表。 我的機器上沒有scipy ,但是請嘗試以下操作:

import numpy as np
import neurolab as nl

input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float)
transformed_input_data = [[x] for x in input_data] # added

print(len(transformed_input_data)) # changed
net = nl.net.newff([[-215.1, -10.5]], [20, 1])
error = net.train(transformed_input_data, transformed_input_data, epochs=500) # changed

編輯2:

我不會解釋什么是神經網絡(我已經有相當長時間沒有使用它們了),但是當我們想使用1個隱藏層將3D輸入轉換為2D輸出時,它看起來應該像這樣:

INPUT [3D] | HIDDEN LAYER | OUTPUT [2D]
                ----
               | H1 |
                ----
   ----
  | X1 |
   ----
                ----         ----
               | H2 |       | Y1 |
                ----         ----


   ----               
  | X2 |                      
   ----                      

                ----         ----
               | H3 |       | Y2 |
                ----         ----
   ----
  | X3 |
   ----
                ----
               | H4 |
                ----

每個X乘以每個H,我們計算輸出。 我們如何獲得這些H值? 它們是在training神經網絡時由算法計算得出的。 我們指定需要多少隱藏層,並通過反復試驗得出令人滿意的解決方案。 非常重要-我們應該使用不同的數據來訓練和檢查神經網絡的輸出。

我們什么時候可以使用這個特定的網絡? 例如,根據年齡,客戶工資和特定餐廳的位置來計算在麥當勞點了多少巨無霸和薯條。 它看起來像這樣:

    -----
   | AGE |
    -----
                ----         ----------
               | H2 |       | BIG MACS |
                ----         ----------


   --------               
  | SALARY |                      
   --------                      

                ----         -----------
               | H3 |       |   FRIES   |
                ----         -----------
    -------
   | PLACE |
    -------
                ----
               | H4 |
                ----

因此,可以說轉換看起來像是f([Age, Salary, Place]) = [Big Macs, Fries] 員工可能收集了數百萬個輸入和輸出數據記錄,以培訓我們的網絡,因此將其翻譯成python,將是輸入list (3D),而我們希望輸出list (2D)。 例如f([[A_1, S_1, P_1], [A_2, S_2, P_2], ... , [A_N, S_N, P_N]]) -> [[BM_1, F_1], [BM_2, F_2], ... , [BM_N, F_N]]

我們希望您的數據與之相同,但我們希望輸入和輸出均為一維,因此我們不得不將list每個元素“包裝”到另一個list 輸出和模擬輸入相同-您忘記了。

predicted_output = net.sim(input_data) # this won't work! You should wrap it

但是在訓練數據上測試神經網絡只是錯誤的-您不應該那樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM