2017-06-30 80 views
0

這是一個簡單的神經網絡,包含3個輸入值和3個輸出值。keras神經網絡架構不正確

錯誤:

ValueError: Error when checking model target: expected dense_78 to have shape (None, 3) but got array with shape (3, 1) 

是,當我執行此網絡拋出。我已經設定的最後一層有匹配的標籤數這3個可能的輸出:

model.add(Dense(3, activation='softmax')) 

我沒有正確的架構這個網絡,哪裏是我的錯?

data = ([[ 0.29365378], 
     [ 0.27958957], 
     [ 0.27946938]]) 

labels = [[1], [2], [3]] 

import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.optimizers import SGD 

model.add(Dense(64, activation='relu', input_dim=1)) 
model.add(Dropout(0.5)) 
model.add(Dense(64, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(3, activation='softmax')) 

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', 
       optimizer=sgd, 
       metrics=['accuracy']) 

model.fit(data, labels, 
      epochs=20, 
      batch_size=32) 

回答

2

一個Dense(3...)會給你三個輸出每個樣品

如Keras所說,Dense(3...)的輸出具有shape(BatchSize,3)或(None,3)

如果您希望每個樣本有3個可能的類中的一個,那麼您必須具有形狀爲(BatchSize,3)的labels。凡在你的情況下,批量大小似乎也3.

您必須one-hot載體格式化標籤:

  • 類1 = [1,0,0]
  • 類2 = [0 ,1,0]
  • 類3 = [0,0,1]

在keras.utils可以幫助你轉化數值類成一熱載體類的to_categorical

如果有三個樣品,必須具有標籤爲:

labels = [[1,0,0],[0,1,0],[0,0,1]] 

三個樣品,用三個可能的類每個樣品,與所述第一樣品1級,第二樣本類2和第三樣品類3.

這形狀(3,3)將匹配Dense(3...)所要求的(無,3)。