我正在尝试使用MirroredStrategy来使用两个Titan Xp GPU来适应我的顺序模型。我正在Ubuntu 16.04上使用tensorflow 2.0 alpha。
我成功运行了tensorflow文档中的代码片段:
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)
但是,当我尝试训练我的数据时,它是一个稀疏的形状矩阵(使用亚当优化器和二进制交叉熵):
Shape X_train: (91422, 65545)
Shape y_train: (91422, 1)
我在_distribution_standardize_user_data中收到断言错误
assert isinstance(x, dataset_ops.DatasetV2)
在Tensoflow代码中,training.py中的第2166行似乎引起此断言错误。
有人可以向我解释我的数据可能是什么问题吗?
答案 0 :(得分: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浏览更多信息
答案 1 :(得分:0)
好像您正在将数据集输入到model.fit中,model.fit正在期待numpy.ndarray。