什么是预期的卷积1d\u 1有形状

2024-09-29 00:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用一个共解层来训练一个神经系统,但似乎在向它输入和输出维度时遇到了一些问题。。你知道吗

输入包括(x,2050) 输出为(x,13) 因此,对于每行2050列,应该创建一个包含13个元素的数组。。你知道吗

#Define 10 folds:
seed = 7
np.random.seed(seed)
kfold = KFold(n_splits=10, shuffle=False, random_state=None)
print "Splits"
cvscores_acc = []
cvscores_loss = []
hist = []
i = 0
train_set_data_vstacked_normalized_reshaped = np.reshape(train_set_data_vstacked_normalized,train_set_data_vstacked_normalized.shape+(1,))
train_set_output_vstacked_normalized_reshaped = np.reshape(train_set_output_vstacked_normalized,train_set_output_vstacked_normalized.shape+(1,))
for train, test in kfold.split(train_set_data_vstacked_normalized_reshaped):

    print "Model definition!"
    model = Sequential()

    model.add(Convolution1D(13, 3, border_mode='same', input_shape=(2050,1)))

    print "Compiling"
    model.compile(loss='mean_squared_error', optimizer="RMSprop")
    print "Compile done! "

    print '\n'

    print "Train start"

    reduce_lr=ReduceLROnPlateau(monitor='val_loss', factor=0.01, patience=3, verbose=1, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0.00000001)
    stop  = EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')

    log=csv_logger = CSVLogger('training_'+str(i)+'.csv')


    hist_current = model.fit(train_set_data_vstacked_normalized_reshaped[train],
                                train_set_output_vstacked_normalized_reshaped[train],
                                shuffle=False,
                                validation_data=(train_set_data_vstacked_normalized_reshaped[test],train_set_output_vstacked_normalized_reshaped[test]),
                                validation_split=0.1,
                                nb_epoch=150,
                                verbose=1,
                                callbacks=[reduce_lr,log,stop])

    hist.append(hist_current)

    print()
    print model.summary()
    print "Model stored"
    model.save("Model"+str(i)+".h5")
    model.save_weights("Model"+str(i)+"_weights.h5")
    del model
    print "New Model:"
    i=i+1

我似乎在输入数据时遇到了问题,我在某个地方读到,Convolution1D期望一个3d作为输入和输出,这就是为什么我要将它重塑为3d。。但不知为什么它还是不合适。你知道吗

我在当前代码中遇到此错误:

Exception: Error when checking model target: expected convolution1d_1 to have shape (None, 2050, 13) but got array with shape (221286, 13, 1)

为什么我不能开始一个训练课程?。。。你知道吗


Tags: outputdatamodelnptrainhistseedprint
1条回答
网友
1楼 · 发布于 2024-09-29 00:16:14

所以基本上-在你的人际网络中你有:

  • 由一维特征向量序列组成的一种输入,每个特征向量的长度为2050。你知道吗
  • 您正在应用一组具有kernel_size = 3的13个一维卷积特征,而在same边界模式中,这些特征产生13个维特征向量的序列,每个特征向量的长度为2050。你知道吗

这就解释了为什么Keras向您显示它需要一个(None, 2050, 13)目标形状。你知道吗

有几种方法可以使其工作:

  1. 您可以通过添加以下内容将卷积层的输出变平:

    from keras.layers import Flatten, Dense 
    model.add(Flatten())
    model.add(Dense(13))
    

    然后把你的目标变平train_set_output_vstacked_normalized_reshaped[train].reshape((221286, 13))

  2. 通过添加又一卷积层结合池和不同边界模式以获得长度为13的输出序列。这里有太多的可能性,我将跳过这一部分。

请注意-您在这里只使用激活功能。在最后一个dense层中,这似乎是一个好的决定,而在前面的层中,应用一些非线性激活(如relu)以使您的网络更好地工作是很好的。你知道吗

相关问题 更多 >