“TypeError: 'Tenseur' objet n'est pas itératif” erreur avec tensorflow Estimateur
J'ai un sur le plan procédural généré (infini) de la source de données et suis en train de l'utiliser comme entrée de haut-niveau Tensorflow Estimator
pour former une base d'image de l'objet 3D détecteur.
J'ai configuré le jeu de données, comme dans la Tensorflor Estimateur Démarrage rapide, et mon dataset_input_fn
retourne un tuple de fonctionnalités et d'étiquettes Tensor
's, tout comme la Estimateur.train
fonction précise, et comment cette tutoriel montre, mais j'obtiens une erreur lorsque vous essayez d'appeler le train de la fonction:
TypeError: 'Tensor' object is not iterable.
Ce que je fais mal?
def data_generator():
"""
Generator for image (features) and ground truth object positions (labels)
Sample an image and object positions from a procedurally generated data source
"""
while True:
source.step() # generate next data point
object_ground_truth = source.get_ground_truth() # list of 9 floats
cam_img = source.get_cam_frame() # image (224, 224, 3)
yield (cam_img, object_ground_truth)
def dataset_input_fn():
"""
Tensorflow `Dataset` object from generator
"""
dataset = tf.data.Dataset.from_generator(data_generator, (tf.uint8, tf.float32), \
(tf.TensorShape([224, 224, 3]), tf.TensorShape([9])))
dataset = dataset.batch(16)
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels
def main():
"""
Estimator [from Keras model](https://www.tensorflow.org/programmers_guide/estimators#creating_estimators_from_keras_models)
Try to call `est_vgg.train()` leads to the error
"""
....
est_vgg16 = tf.keras.estimator.model_to_estimator(keras_model=keras_vgg16)
est_vgg16.train(input_fn=dataset_input_fn, steps=10)
....
Ici est la code complet
(note: les choses sont nommées différemment à partir de cette question)
Ici est la trace de la pile:
Traceback (most recent call last):
File "./rock_detector.py", line 155, in <module>
main()
File "./rock_detector.py", line 117, in main
est_vgg16.train(input_fn=dataset_input_fn, steps=10)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 302, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 711, in _train_model
features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py", line 694, in _call_model_fn
model_fn_results = self._model_fn(features=features, **kwargs)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/estimator.py", line 145, in model_fn
labels)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/estimator.py", line 92, in _clone_and_build_model
keras_model, features)
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/estimator.py", line 58, in _create_ordered_io
for key in estimator_io_dict:
File "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 505, in __iter__
raise TypeError("'Tensor' object is not iterable.")
TypeError: 'Tensor' object is not iterable.
get_next = iterator.get_next(); est_vgg16.train(input_fn=get_next, steps=10
, mais je ne l'utilise pas keras donc je ne suis pas familiarisé avec la .train
de la fonction en cours d'utilisation.Pouvez-vous s'il vous plaît partager le full stack trace de l'erreur?
Mis à jour le post avec la trace de la pile. C'est un peu dur de comprendre ce qui se passe sous le capot avec l'api de haut niveau. Je l'ai eu à travailler avec autant d'effort par commutation au niveau inférieur de l'interface pour tf et juste "alimentation" avec le générateur manuellement. La bonne chose à propos de plus haut niveau de l'api, cependant, est qu'il gère l'ensemble de la formation et de détails et pouvez probablement optimiser le traitement.
OriginalL'auteur matwilso | 2017-11-11
Vous devez vous connecter pour publier un commentaire.
Faire de votre entrée de retour de la fonction d'un dictionnaire de fonctions comme ceci:
tf.uint8
àtf.float32
dansdataset_input_fn
.OriginalL'auteur Maxim