【问题标题】:Passing input in Tensorflow Mirrored Strategy distirbuted computing在 TensorFlow Mirroredstrategy 分布式计算中传递输入
【发布时间】:2018-06-25 07:47:41
【问题描述】:

所以我正在关注 tensorflow MirroredStrategy 上的示例代码。但是,我收到以下错误

raise ValueError('model_fn (%s) must include features argument.' % model_fn) 
ValueError: model_fn (<function build_model_fn_optimizer.<locals>.model_fn at 0x7f1c01098048>) must include features argument.

我想我是按照描述来的,如果有人能在我的代码 sn-p 中看到任何问题并指出它,那将非常有帮助。

def NeuralNet(images):
## some neuralnetwork
prediction = 0 # just a place holder it is actually a mask
return prediction


def build_model_fn_optimizer():
    optimizer = tf.train.AdagradOptimizer(learning_rate=0.001)

def model_fn(images, masks, mode):
    predict_mask = NeuralNet(images)

    if mode == tf.estimator.ModeKeys.PREDICT:
        predictions = {'predicted_masks': predict_mask}
        return tf.estimator.EstimatorSpec(mode, predictions = predictions)

    def loss_fn():
        loss = tf.losses.sparse_softmax_cross_entropy(tf.flatten(predict_mask),
                                                      tf.flatten(masks))
        return loss

    if mode == tf.estimator.ModeKeys.EVAL:
        return tf.estimator.EstimatorSpec(mode, loss = loss_fn())

    assert mode == tf.estimator.ModeKeys.TRAIN

    global_step = tf.train.get_global_step()
    train_op = optimizer.minimize(loss_fn(), global_step = global_step)
    return tf.estimator.EstimatorSpec(mode, loss = loss_fn(), train_op = train_op)

return model_fn

def main(_):

   distribution = tf.contrib.distribute.MirroredStrategy(
    ["/device:GPU:0", "/device:GPU:1", "/device:GPU:2"])
config = tf.estimator.RunConfig(train_distribute=distribution)

def input_fn():

    base_dir = '/path/to/data'
    images_dir = base_dir + '/images'
    mask_dir = base_dir + '/masks'

    list_fn = os.listdir(images_dir)

    train_fn_list = list_fn[0:5]
    test_fn_list = list_fn[5:7]

    _train_image_fn = []
    _train_mask_fn = []
    for fn in train_fn_list:
        _train_image_fn.append(images_dir + '/' + fn)
        _train_mask_fn.append(mask_dir + '/' + fn)

    _test_image_fn = []
    _test_mask_fn = []
    for fn in test_fn_list:
        _test_image_fn.append(images_dir + '/' + fn)
        _test_mask_fn.append(images_dir + '/' + fn)

    train_images = load_data(_train_image_fn)
    train_masks = load_data(_train_mask_fn)

    images_tf = tf.data.Dataset.from_tensors(images_np)
    masks_tf = tf.data.Dataset.from_tensors(masks_np)
    dataset = tf.data.Dataset.zip((images_tf, masks_tf))
    return dataset

estimator = tf.estimator.Estimator(
    model_fn = build_model_fn_optimizer(), config = config)
estimator.train(input_fn = input_fn, steps =10)


if __name__ == '__main__':
  tf.app.run()

在函数NeuralNet中其实就是网络,它返回一个和图片一样大小的掩码。我只是没有写整个网络以避免并发症。 如果有人可以帮助我,那就太好了。 非常感谢。

【问题讨论】:

    标签: python tensorflow deep-learning multi-gpu


    【解决方案1】:

    这不是 MirroredStrategy 的问题,而是您的 model_fn 方法的问题。预计是

    def model_fn(features, labels, mode):
    

    当你的时候

    def model_fn(images, masks, mode):
    

    因此错误抱怨没有看到名为 features 的参数

    ... must include features argument ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多