keras神经网络架构不正确

时间:2017-06-30 19:24:17

标签: neural-network keras

这是一个简单的神经网络,包含3个输入值和3个输出值。

错误:

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)

1 个答案:

答案 0 :(得分:2)

Dense(3...)会为您提供三个输出每个样本

Dense(3...)的输出具有形状(BatchSize,3)或(None,3),正如Keras所说。

如果您想要每个样本的3个可能类别中的一个,那么您必须具有labels形状(BatchSize,3)。在您的情况下,批量大小似乎也是3.

您必须在one-hot向量中格式化标签:

  • class 1 = [1,0,0]
  • class 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)相匹配。