0

我正在尝试在 AMD GPU(AMD Vega 20、Tensorflow 2.2.0、Keras 2.4.3)上使用 Keras 包装器运行一个简单的顺序 Tensorflow 模型,但在尝试拟合时遇到了一个奇怪的问题:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 15 values, but the requested shape has 15976860750

它似乎将批量大小作为输入张量的值的数量,并且以某种方式“请求的形状”的大小爆炸了。模型定义如下:

def create_model(optimizer='rmsprop', init='glorot_uniform'):
    # create model
    model = Sequential()
    model.add(Dense(12,input_dim=8, kernel_initializer=init, activation='relu'))
    model.add(Dense(8, kernel_initializer=init, activation='relu'))
    model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy'])
    return model
modelClf = KerasClassifier(build_fn=create_model, verbose=1, batch_size=15, epochs=9)

如果我在没有安装 GPU 的机器上仅在 CPU 上运行完全相同的模型,则可以正常工作。它也适用于另一台运行 NVidia GPU(使用 Tensorflow 1.15.3 和 Keras 2.3.1)的机器上的 CUDA11 实现。

我不知道为什么它会请求 GPU 内存大小作为后来的 Tensorflow 版本的输入大小,并且只有在 AMD GPU 存在的情况下。有什么明显的地方我可能在这里的配置有问题吗?

编辑:针对下面的评论,经过一些调整后,“请求的大小”在某种程度上与批量大小有关,而不是与想象中的 GPU 内存相关(这个数字显然是巧合 - 将批量大小设置为 10 给出了“请求的大小” 1092616192 代替)。输入只是一个简单的 panda 数据帧,每行有 8 个值(由 input_dim 定义,如前所述,这在其他机器上可以正常工作)。

错误发生在调用 fit() 进行训练期间 - 我可以从输出中看到它在像这样崩溃之前大约 5 个 epoch。回溯是:(“~/rocm/keras”只是我为此环境安装python包的路径)

    File "~/rocm/keras/tensorflow/python/keras/wrappers/scikit_learn.py", line 223, in fit
      return super(KerasClassifier, self).fit(x, y, **kwargs)
    File "~/rocm/keras/tensorflow/python/keras/wrappers/scikit_learn.py", line 166, in fit
         history = self.model.fit(x, y, **fit_args)
    File "~/rocm/keras/tensorflow/python/keras/engine/training.py", line 66, in _method_wr    apper
      return method(self, *args, **kwargs)
    File "~/rocm/keras/tensorflow/python/keras/engine/training.py", line 848, in fit
      tmp_logs = train_function(iterator)
    File "~/rocm/keras/tensorflow/python/eager/def_function.py", line 580, in __call__
      result = self._call(*args, **kwds)
    File "~/rocm/keras/tensorflow/python/eager/def_function.py", line 611, in _call
      return self._stateless_fn(*args, **kwds)  # pylint: disable=not-callable
    File "~/rocm/keras/tensorflow/python/eager/function.py", line 2420, in __call__
      return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
    File "~/rocm/keras/tensorflow/python/eager/function.py", line 1665, in _filtered_call
      self.captured_inputs)
    File "~/rocm/keras/tensorflow/python/eager/function.py", line 1746, in _call_flat
      ctx, args, cancellation_manager=cancellation_manager))
    File "~/rocm/keras/tensorflow/python/eager/function.py", line 598, in call
      ctx=ctx)
    File "~/rocm/keras/tensorflow/python/eager/execute.py", line 60, in quick_execute
      inputs, attrs, num_outputs)
  tensorflow.python.framework.errors_impl.InvalidArgumentError:  Input to reshape is a tensor with 10 values, but the requested shape has 1092616192
4

0 回答 0