使用 keras 库指定 Dense
Specifying Dense using keras library
我有点误解如何为我的数据创建一个简单的序列。
数据具有以下维度:
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))
错误信息:
Exception: Error when checking model input: expected dense_input_14 to
have shape (None, 1) but got array with shape (2369, 12)ç
错误是:
Error when checking model target: expected activation_42 to have shape
(None, 12) but got array with shape (2369, 1)
此错误发生在行:
model.add(Dense(in_out_neurons))
如何更改 Dense
使其正常工作?
另一个问题是如何添加一个简单的自动编码器来初始化 ANN 的权重?
您的问题之一是您似乎误解了批次是什么。
批次是一次计算的训练样本数,因此不是一次从 X_train
中计算一个训练样本,而是一次使用,例如,一次 100 个。这里重要的一点是,这与您的模型无关。
所以当你写
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))
然后创建一个输出大小为一批的全连接层。这没有多大意义。
另一个问题是您的模型的输出是 12 个神经元,而您的 Y
只有一个 value/neuron。您的模型如下所示:
|
v
[128]
[128]
[ 12]
|
v
然后 fit()
所做的是,它将形状为 (128, 12)
((batch size, X_train.shape[1])
) 的矩阵输入到模型中,并尝试比较形状为 (128,12)
的输出最后一层到批处理的相应 Y
值(形状 (128,1)
)。
我有点误解如何为我的数据创建一个简单的序列。
数据具有以下维度:
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))
错误信息:
Exception: Error when checking model input: expected dense_input_14 to have shape (None, 1) but got array with shape (2369, 12)ç
错误是:
Error when checking model target: expected activation_42 to have shape (None, 12) but got array with shape (2369, 1)
此错误发生在行:
model.add(Dense(in_out_neurons))
如何更改 Dense
使其正常工作?
另一个问题是如何添加一个简单的自动编码器来初始化 ANN 的权重?
您的问题之一是您似乎误解了批次是什么。
批次是一次计算的训练样本数,因此不是一次从 X_train
中计算一个训练样本,而是一次使用,例如,一次 100 个。这里重要的一点是,这与您的模型无关。
所以当你写
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons)))
然后创建一个输出大小为一批的全连接层。这没有多大意义。
另一个问题是您的模型的输出是 12 个神经元,而您的 Y
只有一个 value/neuron。您的模型如下所示:
|
v
[128]
[128]
[ 12]
|
v
然后 fit()
所做的是,它将形状为 (128, 12)
((batch size, X_train.shape[1])
) 的矩阵输入到模型中,并尝试比较形状为 (128,12)
的输出最后一层到批处理的相应 Y
值(形状 (128,1)
)。