2017-06-30 82 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)。