使用 MirroredStrategy 时出现 AssertionError:isinstance(x, dataset_ops.DatasetV2)
Posted
技术标签:
【中文标题】使用 MirroredStrategy 时出现 AssertionError:isinstance(x, dataset_ops.DatasetV2)【英文标题】:AssertionError when using MirroredStrategy: isinstance(x, dataset_ops.DatasetV2) 【发布时间】:2019-10-20 21:59:21 【问题描述】:我正在尝试使用 MirroredStrategy 来拟合我使用两个 Titan Xp GPU 的顺序模型。我在 ubuntu 16.04 上使用 tensorflow 2.0
alpha。
我成功运行了 tensorflow 文档中的代码 sn-p:
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])
model.compile(loss='mse', optimizer='sgd')
dataset = tf.data.Dataset.from_tensors(([1.], [1.])).repeat(100).batch(10)
model.fit(dataset, epochs=2)
model.evaluate(dataset)
但是,当我尝试对我的数据进行训练时,这是一个稀疏的形状矩阵(使用 adam 优化器和二元交叉熵):
Shape X_train: (91422, 65545)
Shape y_train: (91422, 1)
我在 _distribution_standardize_user_data 中收到断言错误
assert isinstance(x, dataset_ops.DatasetV2)
在TensorFlow
代码中,training.py 中的第 2166 行似乎导致了此断言错误。
有人可以向我解释我的数据可能存在什么问题吗?
【问题讨论】:
【参考方案1】:我在使用 dataset= strategy.experimental_distribute_dataset(train_dataset)
和 model.fit(dataset)
时遇到了类似的错误。
我删除strategy.experimental_distribute_dataset
后。它工作正常。它类似于TF document,他们说keras.Model.fit()
自动处理所有事情,只有当我们想使用tf.GradientTape()
进行定制训练时,我们才需要手动分发数据集。
您可以通过offical tutorial of MNIST了解更多信息
【讨论】:
【参考方案2】:似乎您将数据集输入 model.fit,model.fit 期待一个 numpy.ndarray。
【讨论】:
以上是关于使用 MirroredStrategy 时出现 AssertionError:isinstance(x, dataset_ops.DatasetV2)的主要内容,如果未能解决你的问题,请参考以下文章
使用DataContractJsonSerializer发序列化对象时出现的异常
使用 websocket 时出现“TypeError: a float is required”