使用keras库指定密集

时间:2016-06-13 15:02:59

标签: python keras

我稍微误解了如何为我的数据创建一个简单的序列。

数据具有以下尺寸:

X_train.shape
(2369, 12)

y_train.shape
(2369,)

X_test.shape
(592, 12)

y_test.shape
(592,)

这是我创建模型的方式:

batch_size = 128
nb_epoch = 20
in_out_neurons = X_train.shape[1] 
dimof_middle = 100

model = Sequential()
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(batch_size))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(in_out_neurons))
model.add(Activation('linear'))

# I am solving the regression problem, not the classification one
model.compile(loss="mean_squared_error", optimizer="rmsprop") 

history = model.fit(X_train, y_train,
                    batch_size=batch_size, nb_epoch=nb_epoch,
                    verbose=1, validation_data=(X_test, y_test))

错误消息:

  

异常:检查模型输入时出错:期望dense_input_14为   有形状(无,1)但有阵形(2369,12)ç

错误是:

  

检查模型目标时出错:预期activation_42具有形状   (无,12)但是有形状的阵列(2369,1)

此错误发生在以下行:

model.add(Dense(in_out_neurons))

如何更改Dense以使其有效?

另一个问题是如何添加一个简单的自动编码器以初始化ANN的权重?

1 个答案:

答案 0 :(得分:4)

您的一个问题是您似乎误解了批次是什么。 批处理是一次计算的训练样本的数量,因此不是一次使用X_train计算一个训练样本,而是一次使用100个。这里重要的一点是,这与你的模型无关。

所以当你写

model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))

然后创建一个完全连接的图层,输出大小为一个批处理。这没有多大意义。

另一个问题是你的模型的输出是12个神经元而你的Y只有一个值/神经元。您的模型如下所示:

  |
  v
[128]
[128]
[ 12]
  |
  v

然后fit()做了什么,它将形状(128, 12)(batch size, X_train.shape[1]))的矩阵输入到模型中,并尝试比较最后一个形状(128,12)的输出将图层添加到批次的相应Y值(形状(128,1))。