python - 预计 volv1d_1 的形状是多少

标签 python machine-learning neural-network keras conv-neural-network

我目前正在使用协卷积层来训练神经网络,但在向其提供输入和输出维度时似乎存在一些问题。

输入由 (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)

为什么我无法开始培训类(class)?...

最佳答案

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

  • 由每个长度为 2050 的一维特征向量序列组成的输入。
  • 您正在应用一组 13 个一维卷积特征,其中 kernel_size = 3same 边界模式下会生成具有长度的 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_reshape[train].reshape((221286, 13)) 压平你的目标

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

请注意 - 您在这里仅使用激活函数。虽然在最后的密集层中这似乎是一个不错的决定,但在前面的层中最好应用一些非线性激活(例如 relu)以使您的网络工作得更好。

关于python - 预计 volv1d_1 的形状是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41683309/

相关文章:

Python:异常后重试会离开导致异常的行

python - 将字符串插入列表而不拆分为字符

python - 如何使用 urllib 和 re 以 Python 检索实时价格数据

java - weka:自动应用属性选择

java - 基本的 deeplearning4j 分类示例

python - 无法使用 Python 打开 Unicode URL

machine-learning - 如何创建具有多个输出层的神经网络(Julia、Flux)

machine-learning - 检测图像中的物体,他们是如何做到的。我认为这令人难以置信

python-3.x - Keras UpSampling2D 不一致的行为

python - 如何应用经过训练的神经网络将输出写入 csv 文件?