【问题标题】:Getting : ValueError: Expected ndim=3, found ndim=2. Full shape received: [100, 1000] on running model.fit() in tensorflow's keras module获取:ValueError:预期 ndim=3,发现 ndim=2。收到完整形状:[100, 1000] 在 tensorflow 的 keras 模块中运行 model.fit()
【发布时间】:2020-07-24 13:40:27
【问题描述】:

所以我正在尝试制作一个 CNN 来对 COVID19 推文进行情绪分析。我已经制作了一个基本的 CNN,它应该从每条推文的前 1000 个字数向量中进行训练,这些向量被标记为正面或负面。

变量的形状

features.shape : (100000, 1000)
labels.shape : (100000,)

型号

model = Sequential()

model.add(Conv1D(input_shape=(100000,1000),filters=64,kernel_size=(3),padding="same", activation="relu",))
model.add(Conv1D(filters=64,kernel_size=(3),padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))

model.add(Conv1D(filters=128, kernel_size=(3), padding="same", activation="relu"))
model.add(Conv1D(filters=128, kernel_size=(3), padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))

model.add(Conv1D(filters=256, kernel_size=(3), padding="same", activation="relu"))
model.add(Conv1D(filters=256, kernel_size=(3), padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))

model.add(Flatten())
model.add(Dense(units=512,activation="relu"))
model.add(Dense(units=512,activation="relu"))
model.add(Dense(units=2, activation="softmax"))

model.compile(optimizer='nadam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

checkpoint = ModelCheckpoint('model.h5', monitor='loss', verbose=0,
    save_best_only=True, mode='auto', save_freq=1)

现在,模型编译得很好,我认为输入形状也符合文档,即(元素数量,每个元素的长度)。

当我尝试运行 .fit() 函数时出现问题。

hist=model.fit(features, labels, epochs=1000, batch_size=100, callbacks=[checkpoint])

我明白了……

值错误

Epoch 1/1000
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-49-be37a193e07d> in <module>()
----> 1 hist=model.fit(features, labels, epochs=1000, batch_size=100, callbacks=[checkpoint])

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    966           except Exception as e:  # pylint:disable=broad-except
    967             if hasattr(e, "ag_error_metadata"):
--> 968               raise e.ag_error_metadata.to_exception(e)
    969             else:
    970               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:531 train_step  **
        y_pred = self(x, training=True)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:886 __call__
        self.name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:180 assert_input_compatibility
        str(x.shape.as_list()))

    ValueError: Input 0 of layer sequential_6 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [100, 1000]

我试图做出不同的变化,我认为这可能是问题,但没有运气。我在 Conv2D 中没有遇到任何问题,它只是将单个元素的形状作为 input_size 以及 .fit() 方法中的整个特征和标签数组。所以,除了我已经给出的不同的 input_size 格式之外,这里还需要对 Conv1D 做些什么。

【问题讨论】:

    标签: python deep-learning tf.keras


    【解决方案1】:
    features.shape : (100000, 1000)
    labels.shape : (100000,)
    

    您输入的形状不应该是(100000, 1000),而应该是(1000, ) 你需要将你的标签重塑为(1000000, 1)。 feature.shape 中的第一个维度表示训练示例的数量。它不包含在输入维度中。

    您提供的输入形状是单个训练示例的形状,而不是您的完整数据集的形状。

    【讨论】:

    • 不,将输入大小设置为 (1000, ) 不起作用。无论如何,我能够找到我的错误并发布了答案。
    • 这取决于你如何重塑你的数据集。对于(100000, 1000, ),输入形状为(1000, ),对于(100000, 1000, 1),其(1000, 1)。它没有用,因为你重塑了你的数据。希望对您有所帮助。
    • 嗯,现在我明白了。谢谢:)
    【解决方案2】:

    好的,所以从 Conv2D 的 input_size 格式中获取参考,我将 reshaped 整个特征数组设置为 (100000,1000,1) 并将 input_size 设置为 (1000,1) 并且它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2021-07-13
      • 2021-04-08
      • 2021-04-09
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      相关资源
      最近更新 更多