Python keras - 模型层出错

时间:2017-05-12 18:18:03

标签: python deep-learning keras

我是使用人工神经网络的分类问题的新手

我有一个分类问题,输入数据是8列,十进制值是度量,输出数据是8列,整数值是对象

INPUTS

785.39 6.30 782.75 771.82 7.53 -94.86 378.66 771.82
.
.
.

OUTPUTS

  8     9     5      7     3     1      6      2
  .
  .
  .

训练数据的记录为800,测试数据的记录为200

这是代码

import numpy
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils

seed = 7
numpy.random.seed(seed)
datasetTrain = numpy.loadtxt("train.csv", delimiter=",")
datasetTest = numpy.loadtxt("test.csv", delimiter=",")

X_train = datasetTrain[:,0:7]
y_train = datasetTrain[:,8:15]

X_test = datasetTest[:,0:7]
y_test = datasetTest[:,8:15]

y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(7, input_dim=7, kernel_initializer='normal', activation='relu'))
    model.add(Dense((5593, 785), kernel_initializer='normal', activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    return model

model = baseline_model()
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=400, 
batch_size=200, verbose=25)
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[1]*100))

我收到此错误

Traceback (most recent call last):
  File "proyecto.py", line 29, in <module>
    model = baseline_model()
  File "proyecto.py", line 24, in baseline_model
    model.add(Dense((5593, 785), kernel_initializer='normal', activation='softmax'))
ValueError: setting an array element with a sequence.

这个数据的最佳模型是什么?

3 个答案:

答案 0 :(得分:1)

这部分:

model.add(Dense((5593, 785), kernel_initializer='normal', activation='softmax'))

错误,Dense的第一个参数是输出神经元的数量,它应该是标量,而不是元组或向量。如果您想要2D形状的输出,那么您可以使用Reshape图层重塑输出并执行以下操作:

model.add(Dense(5593 * 785, kernel_initializer='normal', activation='softmax'))
model.add(Reshape((5593, 785)))

答案 1 :(得分:0)

在您的第一个图层model.add(Dense(7...之后,该图层的输出具有维度7(7个输出神经元)。下一层可以自动处理该7神经元层作为输入。但是你要告诉Keras,当它寻找另一个单一数字时,下一层应该有(5593, 785)的输出神经元。

通过更改model.add(Dense((5593, 785)...

,您是否得到了您想要的内容?

model.add(Dense(1...

model.add(Dense(n...

(其中n是您尝试分类的分类变量的可能级别数?

答案 2 :(得分:0)

model = Sequential()

num_pixels = IMG_HEIGHT * img_width

model.add(Dense(num_pixels, input_dim=num_pixels, kernel_initializer='normal', 
activation='relu'))
model.add(Dense(num_classes, kernel_initializer='normal', 
activation='softmax'))