我在抓住网络第一层的形状输入时遇到了麻烦。这是我的架构:
# Model Hyperparameters
filter_sizes = [1, 2, 3, 4, 5]
num_filters = 10
dropout_prob = [0.5, 0.8]
hidden_dims = 50
model_input = Input(shape=(X.shape[0], X.shape[1]))
z = model_input
z = Dropout(0.5)(z)
# Convolutional block
conv_blocks = []
for fz in filter_sizes:
conv = Convolution1D(filters=num_filters,
kernel_size=fz,
padding="valid",
activation="relu",
strides=1)(z)
conv = MaxPooling1D(pool_size=2)(conv)
conv = Flatten()(conv)
conv_blocks.append(conv)
z = Concatenate()(conv_blocks) if len(conv_blocks) > 1 else conv_blocks[0]
z = Dropout(dropout_prob[1])(z)
z = Dense(hidden_dims, activation="relu")(z)
model_output = Dense(3, activation="softmax")(z)
model = Model(model_input, model_output)
model.fit(X[train], to_categorical(y[train], num_classes=3))
ValueError: Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (12547, 261)
这就是我的数据:
array([[ 1, 2, 3, ..., 0, 0, 0],
[ 5, 6, 7, ..., 0, 0, 0],
[15, 10, 4, ..., 0, 0, 0],
...,
[ 5, 6, 8, ..., 0, 0, 0],
[11, 10, 14, ..., 0, 0, 0],
[14, 8, 8, ..., 0, 0, 0]])
我有14640个样本,有261个维度
答案 0 :(得分:0)
由于错误表明这是一个整形问题,您提供的输入(model_input)的形状应该与您在model.fit中提供的数据的输入形状相匹配
使用以下方法重新检查您的形状:
"ajax": {
"url": dataUrl,
"type": "POST",
"dataSrc": ''
}
from keras import backend as K
如果是张量的话
或者K.shape(input _tensor)
如果它是一个numpy数组。
此外,如果形状不匹配(他们不会)使用该功能
K.reshape
更多帮助请参阅keras / backend API
答案 1 :(得分:0)
根据Keras documentation,Convolution1D层接受3D张量作为其输入。您需要在输入数据中提供step
作为额外维度。
您可以查看此link以获取更多信息。