Keras input shape throws value error expected 4d but got an array with shape (60000, 28,28)

前端 未结 2 515
执念已碎
执念已碎 2021-01-28 15:18
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
x_train = x_train.astype(\'float32\') / 255
x_test = x_test.astype(\'float32\') / 255
         


        
相关标签:
2条回答
  • 2021-01-28 16:01

    Yes, this is correct the parameter input_shape is prepared to take 3 values. However the function Conv2D is expecting a 4D array as input, covering:

    1. Number of samples
    2. Number of channels
    3. Image width
    4. Image height

    Whereas the function load_data() is a 3D array consisting of width, height and number of samples.

    You can expect to solve the issue with a simple reshape:

    train_X = train_X.reshape(-1, 28,28, 1)
    test_X = test_X.reshape(-1, 28,28, 1)
    

    A better defitinion from keras documentation:

    Input shape: 4D tensor with shape: (batch, channels, rows, cols) if data_format is "channels_first" or 4D tensor with shape: (batch, rows, cols, channels) if data_format is "channels_last".

    0 讨论(0)
  • 2021-01-28 16:13

    You are missing the channels dimension (with a value of one), it can be easily corrected by reshaping the array:

    x_train = x_train.reshape((-1, 28, 28, 1))
    x_test = x_test.reshape((-1, 28, 28, 1))
    
    0 讨论(0)
提交回复
热议问题