【发布时间】:2019-09-23 04:17:20
【问题描述】:
注意:第一次发帖。我试图在我的描述中做到彻底
我一直在尝试按照本教程设置我认为非常简单的 CNN: https://machinelearningmastery.com/cnn-models-for-human-activity-recognition-time-series-classification/
我的 Xtrain 数据集是一个时间序列,它是一个具有 34396 行(样本)和 600 列(时间步长)的 numpy 数组。我的 Ytrain 数据集只是一个包含标签 0、1 或 2(作为整数)的数组。我只是在尝试使用 CNN 进行多分类。
我遇到了类似的错误
输入 0 与层 conv1d_39 不兼容:预期 ndim=3,发现 ndim=4
当input_shape=(n_timesteps,n_features,n_outputs)
或
检查输入时出错:预期 conv1d_40_input 有 3 尺寸,但得到了形状为 (34396, 600) 的数组
当input_shape=(n_timesteps,n_features)
我已经在网上搜索了几个小时,但似乎找不到解决问题的方法。我认为这是我的数据格式和 input_shape 值的一个简单问题,但我无法修复它。
我尝试将 input_shape 设置为
(None, 600, 1)
(34396,600, 1)
(34396,600)
(None,600)
在各种其他组合中。
train_df = pd.read_csv('training.csv')
test_df = pd.read_csv('test.csv')
x_train=train_df.iloc[:,2:].values
y_train=train_df.iloc[:,1].values
x_test=train_df.iloc[:,2:].values
y_test=train_df.iloc[:,1].values
n_rows=len(x_train)
n_cols=len(x_train[0])
def evaluate_model(trainX, trainy, testX, testy):
verbose, epochs, batch_size = 0, 10, 32
n_timesteps, n_features, n_outputs = trainX.shape[0], trainX.shape[1], 3
print(n_timesteps, n_features, n_outputs)
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features,n_outputs)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose)
# evaluate model
_, accuracy = model.evaluate(testX, testy, batch_size=batch_size, verbose=0)
return accuracy
evaluate_model(x_train,y_train,x_test,y_test)
【问题讨论】:
标签: python keras conv-neural-network