J'ai un fichier tfrecords stockant des images sous forme de bytestrings. Je veux définir la colonne de fonctionnalité pour cela comme tf.feature_column.numeric_column("image", shape=[64, 64], dtype=tf.float32)
mais comme il n'est pas stocké comme une liste flottante dans le fichier tfrecords, cela ne fonctionne pas.Décoder les octets bruts dans tfrecords dans la fonction tf.feature_column.numeric_column
J'ai ensuite essayé d'utiliser l'argument normalizer_fn de numeric_column que j'ai défini comme.
def decode(image_bytestring):
img = tf.reshape(tf.decode_raw(image_bytestring, tf.uint8), [28, 28])
img = tf.cast(img, tf.float32)
return img
...
examples = tf.parse_example(
serialized_batch,
tf.feature_column.make_parse_example_spec(feature_columns))
Le premier problème est cependant que la spécification d'analyse syntaxique FixedLenFeature(shape=(28, 28), dtype=tf.float32, default_value=None)
générée par cette feature_column dit pour analyser un float32 quand il est effectivement stocké comme une chaîne qui provoque une erreur. Donc, la fonction de décodage n'est pas utilisée.
Existe-t-il un moyen de contourner cela lors de l'utilisation de tf.feature_column autre que de stocker l'image en tant que float_list dans le tfrecord à la place?
On dirait que le fait d'avoir un système de type statique aurait été agréable pour garantir le bon type d'entité à partir de la fonction de mappage.