GPU上的Tensorflow模型:“请求的形状具有[不合理的大数量]值”

问题描述

我正在尝试在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,activation='relu'))
    model.add(Dense(1,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实现良好配合。

我不知道为什么只有在存在AMD GPU的情况下,为什么才会在以后的Tensorflow版本中要求将GPU内存大小作为输入大小。是否有明显的地方配置错误

编辑:为响应以下评论,在进行一些调整后,“请求的大小”与批处理大小有关,而不是与GPU内存有关(该数字显然是巧合-将批处理大小设置为10会给出“要求的尺寸”代替1092616192)。输入只是一个简单的熊猫数据帧,每行有8个值(由input_dim定义,如上所述,在其他机器上的相同实现也可以正常工作)。

调用fit()进行训练的过程中发生错误-从输出中可以看到,它像这样崩溃之前大约有5个时期。追溯是:(“〜/ 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,**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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...