tf.Estimator.train抛出as_list()未在未知的TensorShape

时间:2018-01-07 11:47:55

标签: python tensorflow deep-learning keras

我创建了一个自定义input_func,并将keras模型转换为tf.Estimator进行培训。但是,它一直让我犯错误。

  • 这是我的模型摘要。我试图将Input图层设置为batch_shape=(16, 320, 320, 3)进行测试,但问题仍然存在

    inputs  = Input(batch_shape=(16, 320, 320, 3), name='input_images')
    outputs = yolov2.predict(intputs)
    model   = Model(inputs, outputs)
    
    model.compile(optimizer= tf.keras.optimizers.Adam(lr=learning_rate),
                  loss     = compute_loss)
    
  • 我使用tf.keras.estimator.model_to_estimator进行转换。我还为培训创建了input_fn

    def input_fun(images, labels, batch_size, shuffle=True):
         dataset = create_tfdataset(images, labels)
         dataset = dataset.shuffle().batch(batch_size)
         iterator = dataset.make_one_shot_iterator()
         images, labels = iterator.next()
    
         return {'input_images': images}, labels
    
    estimator = tf.keras.estimator.model_to_estimator(keras_model=model)
    estimator.train(input_fn = lambda: input_fn(images, labels, 32),
                    max_steps = 1000)
    
  • 它抛出了我的错误

    input_tensor = Input(tensor=x, name='input_wrapper_for_' + name)
    ...
    File "/home/dat/anaconda3/envs/webapp/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 1309, in __init__
    self._batch_input_shape = tuple(input_tensor.get_shape().as_list())
    
    "as_list() is not defined on an unknown TensorShape.")
     ValueError: as_list() is not defined on an unknown TensorShape.
    

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 在input_fun中,如果您查看“return {'input_images':images},标签”行中的图像,您将看到您的张量没有形状。您必须为每个图像调用set_shape。 查看https://github.com/tensorflow/models/blob/master/official/resnet/imagenet_main.py,他们调用vgg_preprocessing.preprocess_image来设置形状