我已经查看了各种回复,但是我不明白为什么我会不断得到(10,5)。
为什么要求形状为(10,5)?从哪儿得到那个号码? 我的印象是输入数据的形状应为(“ sample_size”,“ steps或time_len”,“ channels或feat_size”)=>(3809、49、5)。
我也给Conv1D图层输入形状(“ steps or time_len”,“ channels or feat_size”)印象。
我误会了吗?
共有49天,每天5个数据点。样本总数为5079。 75%的数据用于培训,25%的数据用于验证。 10个可能的预测输出答案。
x_train, x_test, y_train, y_test = train_test_split(np_train_data, np_train_target, random_state=0)
print(x_train.shape)
x_train = x_train.reshape(x_train.shape[0], round(x_train.shape[1]/5), 5)
x_test = x_test.reshape(x_test.shape[0], round(x_test.shape[1]/5), 5)
print(x_train.shape)
input_shape = (round(x_test.shape[1]/5), 5)
model = Sequential()
model.add(Conv1D(100, 2, activation='relu', input_shape=input_shape))
model.add(MaxPooling1D(3))
model.add(Conv1D(100, 2, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(49, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=64, epochs=2, validation_data=(x_test, y_test))
print(model.summary())
答案 0 :(得分:0)
您正在使用Conv1D
,但是尝试通过重塑以2D形式表示数据-这会造成问题。尝试通过重塑跳过该部分,因此您的输入将是1行,具有49个值:
x_train, x_test, y_train, y_test = train_test_split(np_train_data, np_train_target, random_state=0)
print(x_train.shape)
input_shape = (x_test.shape[1], 1)
model = Sequential()
model.add(Conv1D(100, 2, activation='relu', input_shape=input_shape))
model.add(MaxPooling1D(3))
model.add(Conv1D(100, 2, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(49, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=64, epochs=2, validation_data=(x_test, y_test))
答案 1 :(得分:0)
您被5除以两次。在这里,您正在重塑数据,与其他答案相反,这是必需的 :
x_train = x_train.reshape(x_train.shape[0], round(x_train.shape[1]/5), 5)
x_test = x_test.reshape(x_test.shape[0], round(x_test.shape[1]/5), 5)
这已经解决了“将时间除以5”的问题。但是在这里,您要定义模型的输入形状,然后再除以5:
input_shape = (round(x_test.shape[1]/5), 5)
只需使用
input_shape = (x_test.shape[1], 5)
相反!请注意,由于此形状是在重塑之后调用的,因此它已经指向正确的形状,时间维度除以5。