层conv2d_1:预期ndim = 4,发现ndim = 3

时间:2017-10-03 15:20:23

标签: python keras

$ currentAdress=2
$ currentAdress=$((0x$currentAdress + 8))
$ printf "%d\n" $currentAdress
10
$ printf "%x\n" $currentAdress
a

我似乎在将过滤器应用到数据上时遇到了一些问题。我需要使用过滤器在(8,1)的5个部分滑动并使用形状(8,1)的过滤器...

但是收到错误消息:

import keras
from keras.models import Sequential
from keras.optimizers import SGD
from keras.layers.core import Dense, Activation, Lambda, Reshape,Flatten
from keras.layers import Conv1D,Conv2D,MaxPooling2D, MaxPooling1D, Reshape
from keras.utils import np_utils
from keras.models import Model
from keras.layers import Input, Dense
from keras.layers import Dropout
from keras import backend as K
from keras.callbacks import ReduceLROnPlateau
from keras.callbacks import CSVLogger
from keras.callbacks import EarlyStopping
from keras.layers.merge import Concatenate
from keras.callbacks import ModelCheckpoint
import random
import numpy as np

window_height = 8
filter_size=window_height
pooling_size = 28
stride_step = 2

def fws():
    input = Input(shape=(5,window_height,1))
    print input.shape
    shared_conv = Conv2D(filters = 1, kernel_size = ((1,window_height,1)))
    output = shared_conv(input)
    print output.shape

fws()

我试图通过添加另一个数字来修复它,但这似乎没有帮助,因为API说它只需要两个数字。

1 个答案:

答案 0 :(得分:0)

错误消息位于您未提交问题的代码行中。它在fit方法中(或预测,评估等)。

它说:

  • 您的数据(您未在问题中显示的numpy数组)有3个维度。
  • 但您的模型需要4个维度,即(batchSize, 5, window_height,1)

当您定义Input((5,window_height,1))时,模型希望每个样本(每个图像)都具有此传递的形状,换句话说,还有一个包含样本的附加维度,即批量大小。在内部,输入形状为(None, 5, window_height, 1)

您必须对输入数据(numpy数组)进行整形,使其与您在输入图层中定义的数据相匹配。

reshapedData = X_train.reshape((samples, 5, window_height, 1))
model.fit

此外,您的kernel_size应该只有2个维度(您使用的是Conv2D)。这3个维度中的一个是通道数。过滤器将自动适应此数字。