user4343712
user4343712

Reputation: 401

When bulding a CNN, I am getting complaints from Keras that do not make sense to me.

My input shape is supposed to be 100x100. It represents a sentence. Each word is a vector of 100 dimensions and there are 100 words at maximum in a sentence.

I feed eight sentences to the CNN.I am not sure whether this means my input shape should be 100x100x8 instead.

Then the following lines

Convolution2D(10, 3, 3, border_mode='same',
                       input_shape=(100, 100))

complains:

Input 0 is incompatible with layer convolution2d_1: expected ndim=4, found ndim=3

This does not make sense to me as my input dimension is 2. I can get through it by changing input_shape to (100,100,8). But the "expected ndim=4" bit just does not make sense to me.

I also cannot see why a convolution layer of 3x3 with 10 filters do not accept input of 100x100.

Even I get thru the complains about the "expected ndim=4". I run into problem in my activation layer. There it complains:

Cannot apply softmax to a tensor that is not 2D or 3D. Here, ndim=4

Can anyone explain what is going on here and how to fix it? Many thanks.

Upvotes: 16

Views: 20478

Answers (3)

ZWang
ZWang

Reputation: 892

Keras's Convolutional layer takes in 4 dimensional arrays, so you need to structure your input to fit it that way. The dimensions are made up of (batch_size,x_dim,y_dim,channels). This makes a lot of sense in the case of images, which is where CNNs are mostly used, but for your case it gets a bit trickier.

However, batch_size is invariant to the dataset so you need to stack the 8 sentences in the first dimension to get (8,100,100). Channels can be kept to 1 and you need to write it in such a way that keras will accept the data, so expanding the data to (8,100,100,1) would be the input shape you need.

Upvotes: 0

Primoz
Primoz

Reputation: 1492

I had the same problem and I solved it adding one dimension for channel to input_shape argument.

I suggest following solution:

Convolution2D(10, 3, 3, border_mode='same', input_shape=(100, 100, 1))

Upvotes: 12

dontloo
dontloo

Reputation: 10865

the missing dimension for 2D convolutional layers is the "channel" dimension.

For image data, the channel dimension is 1 for grayscale images and 3 for color images.

In your case, to make sure that Keras won't complain, you could use 2D convolution with 1 channel, or 1D convolution with 100 channels.

Ref: http://keras.io/layers/convolutional/#convolution2d

Upvotes: 9

Related Questions