【发布时间】: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