Conv1D和MaxPooling1D的输入形状

时间:2018-12-27 20:16:31

标签: python-2.7 numpy tensorflow keras

我是Tenorflow Keras的新手。我正在建立一个CNN来训练我的1D输入。我正在寻找有关Conv1D和MaxPooling1D图层的输入大小的帮助。

现在,一个功能通常看起来像这样: [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0] 类似地,它使用像这样的一键式标签: [1、0、0、0、0、0、0、0、0、0]

我有80对。

由于numpy表示我的数组大小为2080,因此将它们拆分为50-50(用于训练和验证),并将功能重塑为(1,2080,1)。

num_classes = 10
model = keras.Sequential()

model.add(keras.layers.InputLayer(input_shape=[2080,1]))
model.add(keras.layers.Conv1D(filters = 32, kernel_size=5, strides=1, padding ='same', activation='relu'))
model.add(keras.layers.MaxPooling1D(pool_size = (10), strides=(5),data_format='channels_first'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dense(num_classes, activation='softmax'))
#model.summary()

我的输入通过InputLayer和Conv1D成功地馈入了,我期望其余的层也一样。但是,返回以下错误: 预期density_1具有2维,但数组的形状为(1、40、10)

1 个答案:

答案 0 :(得分:0)

该错误可能与您的要素数据和标签数据有关。确保要素数据具有以下形状(1、2080、1),并且标签的形状为:(1、10)。

这是一个有效的代码:

from keras.models import Sequential
from keras.layers import Dense, Activation, Conv1D, MaxPooling1D, Flatten
import numpy as np

num_classes = 10
model = Sequential()

model.add(Dense(input_shape=[2080,1], units=10))
model.add(Conv1D(filters = 32, kernel_size=5, strides=1, padding ='same', activation='relu'))
model.add(MaxPooling1D(pool_size = (10), strides=(5), data_format='channels_first'))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam')

x_train = np.random.random((1, 2080, 1))
y_train = np.random.randint(10, size=(10))
y_train = np.reshape(y_train, (1, 10))
model.fit(x_train, y_train, epochs=5, batch_size=32)

live code