title: expected conv2d to have 4 dimensions, but got array with shape
body: <p>I am trying to perform a convolutional network on some medical images that have <strong>nifti</strong> format, using <strong>Keras</strong>.  When I try to fit the model like this:</p>
  
  <pre><code>model.fit(X_train, Y_train, 
        batch_size=batch_size, 
        epochs = n_epoch, 
        validation_data=(X_test, Y_test))
  </code></pre>
  
  <p>I get this error:</p>
  
  <blockquote>
    <p>expected conv2d_171 to have 4 dimensions, but got array with shape
    (1240, 240, 240)</p>
  </blockquote>
  
  <p>But when I change the input size from <code>img_channels = 4</code> to this:</p>
  
  <pre><code>img_channels = 3
  img_rows = 240
  img_cols = 240
  </code></pre>
  
  <p>I get another error:</p>
  
  <blockquote>
    <p>expected input_8 to have shape (240, 240, 3) but got array with shape (240, 240, 4)</p>
  </blockquote>
  
  <p>The size of the images is like this:</p>
  
  <p><a href="https://i.stack.imgur.com/g6uZ8.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/g6uZ8.png" alt="enter image description here"></a></p>
  
  <p>should I resize the images? or flip the order of image elements?</p>
  
  <p>This is the code for the model:</p>
  
  <pre><code>    inputs = Input((img_rows, img_cols, img_channels))
      s = Lambda(lambda x: x / 255) (inputs)
  
      c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (s)
      c1 = Dropout(0.1) (c1)
      c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c1)
      p1 = MaxPooling2D((2, 2)) (c1)
  
      c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p1)
      c2 = Dropout(0.1) (c2)
      c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c2)
      p2 = MaxPooling2D((2, 2)) (c2)
  
      c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p2)
      c3 = Dropout(0.2) (c3)
      c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c3)
      p3 = MaxPooling2D((2, 2)) (c3)
  
      c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p3)
      c4 = Dropout(0.2) (c4)
      c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c4)
      p4 = MaxPooling2D(pool_size=(2, 2)) (c4)
  
      c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p4)
      c5 = Dropout(0.3) (c5)
      c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c5)
  
      u6 = Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same') (c5)
      u6 = concatenate([u6, c4])
      c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u6)
      c6 = Dropout(0.2) (c6)
      c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c6)
  
      u7 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same') (c6)
      u7 = concatenate([u7, c3])
      c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u7)
      c7 = Dropout(0.2) (c7)
      c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c7)
  
      u8 = Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same') (c7)
      u8 = concatenate([u8, c2])
      c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u8)
      c8 = Dropout(0.1) (c8)
      c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c8)
  
      u9 = Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same') (c8)
      u9 = concatenate([u9, c1], axis=3)
      c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u9)
      c9 = Dropout(0.1) (c9)
      c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c9)
  
      outputs = Conv2D(1, (1, 1), activation='sigmoid') (c9)
  </code></pre>