Keras ValueError:输入0与图层conv2d_1不兼容:预期ndim = 4,发现ndim = 5

时间:2017-12-06 01:28:16

标签: python tensorflow deep-learning keras conv-neural-network

我检查了所有解决方案,但我仍面临同样的错误。我的训练图像形状是(26721,32,32,1),我相信它是4维,但我不知道为什么错误显示它是5维。

 model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same',
                            input_shape= input_shape ))

所以这就是我定义model.fit_generator

的方式

model.fit_generator(train_dataset, train_labels, nb_epoch=epochs, verbose=1,validation_data=(valid_dataset, valid_labels), nb_val_samples=valid_dataset.shape[0],callbacks=model_callbacks)

任何人都可以帮我这个吗?

6 个答案:

答案 0 :(得分:15)

问题是input_shape

它实际上只应包含3个维度。内部keras将添加批量维度,使其成为4.

由于您可能使用了input_shape 4维(包括批量),因此keras正在添加第5个维度。

您应该使用input_shape=(32,32,1)

答案 1 :(得分:4)

为重塑数据,我们需要添加第四维,即从(6000,28,28)更改为(6000,28,28,1)

我的代码是:

img_rows=x_train[0].shape[0]
img_cols=x_test[0].shape[1]

X_train=x_train.reshape(x_train.shape[0],img_rows,img_cols,1)

X_test=x_test.reshape(x_test.shape[0],img_rows,img_cols,1)


Input_shape=(img_rows,img_cols,**).  *->  I forgot to put 1 here.

我遇到了同样的问题

Input 0 is incompatible with layer conv2d_4 : except ndim=4 ,found ndim=3

我通过简单地将值放在输入形状中来解决了这个问题

Input_shape=(img_rows,img_cols,1)#store the shape of single image.

解决了这个问题

答案 2 :(得分:1)

你可以使用:

train_dataset= train_dataset.reshape(-1,32,32,1)

现在你可以在算法中使用 input_shape(32,32,1)。

答案 3 :(得分:0)

问题出在input_shape上。尝试添加额外的尺寸/通道,以使keras知道您正在处理灰度图像,即-> {1

input_shape= (56,56,1)。 也许,如果您使用的是普通的深度学习模型,那么它不会引起任何问题,但对于Convnet来说,确实会。

答案 4 :(得分:0)

这里,每当CNN用作2d时,您都需要检查“ channels_first” ,此外,您还要将train_data和test数据重塑为:

  <table class="table table-striped">
    <thead class="bg-secondary text-white">
      <tr>
        <th colspan="3"><h1 class="text-center"><strong>Tag List</strong></h1></th>
      </tr>
      <tr>
        <th colspan="1">Tag</th>
        <th colspan="1">Related Posts</th>
        <th class="text-center" colspan="1">Actions</th>
      </tr>
    </thead>
    <tbody>
      {% for tag in tag_list %}
      <tr>
        <td colspan="1">{{ tag.tag_name }}</td>
        <td colspan="1"><a href="{{ tag.get_absolute_url }}">{{ tag.tag_blogpost.count }}</a></td>
        <td colspan="1">

          <div class="row justify-content-md-center">
            <a class="btn btn-success btn-sm mx-1" href="{% url 'update_tag' slug_tag=tag.slug_tag %}">Update</a>

            <button class="btn btn-danger btn-sm mx-1" type="button" data-toggle="modal" data-target="#deleteModal">Delete</button>

            <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
              <div class="modal-dialog" role="document">
                <div class="modal-content">
                  <div class="modal-header">
                    <h2 class="modal-title text-center" id="deleteModalLabel">Delete Request</h2>
                  </div>
                  <div class="modal-body">
                    <h3>Are you sure to delete this tag?</h3>
                    <h1 class="py-4"><em><strong>{{ tag.tag_name }}</strong></em></h1>
                  </div>
                  <div class="modal-footer">
                    <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal">No, don't do this</button>
                    <form action="{% url 'delete_tag' slug_tag=tag.slug_tag %}" method="POST">
                      {% csrf_token %}
                      <button class="btn btn-danger btn-sm" type="submit" name="button">Yes, delete it</button>
                    </form>
                  </div>
                </div>
              </div>
            </div>
          </div>

        </td>
      </tr>

      {% endfor %}
    </tbody>
  </table>

答案 5 :(得分:0)

我遇到了同样的问题

输入0与conv2d_4层不兼容:除了ndim = 4之外,找到ndim = 3

我通过简单地将值放在输入形状中来解决了这个问题

Input_shape=(img_rows,img_cols,1)#store the shape of single image. .. & the problem is solved