python - tutorial - Tensorflow Slim: TypeError: se esperaba int32, obteniendo una lista que contiene los tensores del tipo ''_Message''
tensorflow tutorial pdf (4)
Encontré a la mayoría de las personas respondiendo mal. Es solo debido al cambio en el tf.concat. Funciona de la siguiente manera.
net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])
usa lo siguiente
net = tf.concat(values=[branch_0, branch_1, branch_2, branch_3],axis=3,)
Recuerde que al pasar los argumentos de la palabra clave deben estar antes que los demás.
Estoy siguiendo this tutorial para aprender TensorFlow Slim pero al ejecutar el siguiente código para Inception:
import numpy as np
import os
import tensorflow as tf
import urllib2
from datasets import imagenet
from nets import inception
from preprocessing import inception_preprocessing
slim = tf.contrib.slim
batch_size = 3
image_size = inception.inception_v1.default_image_size
checkpoints_dir = ''/tmp/checkpoints/''
with tf.Graph().as_default():
url = ''https://upload.wikimedia.org/wikipedia/commons/7/70/EnglishCockerSpaniel_simon.jpg''
image_string = urllib2.urlopen(url).read()
image = tf.image.decode_jpeg(image_string, channels=3)
processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
processed_images = tf.expand_dims(processed_image, 0)
# Create the model, use the default arg scope to configure the batch norm parameters.
with slim.arg_scope(inception.inception_v1_arg_scope()):
logits, _ = inception.inception_v1(processed_images, num_classes=1001, is_training=False)
probabilities = tf.nn.softmax(logits)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, ''inception_v1.ckpt''),
slim.get_model_variables(''InceptionV1''))
with tf.Session() as sess:
init_fn(sess)
np_image, probabilities = sess.run([image, probabilities])
probabilities = probabilities[0, 0:]
sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x:x[1])]
plt.figure()
plt.imshow(np_image.astype(np.uint8))
plt.axis(''off'')
plt.show()
names = imagenet.create_readable_names_for_imagenet_labels()
for i in range(5):
index = sorted_inds[i]
print(''Probability %0.2f%% => [%s]'' % (probabilities[index], names[index]))
Parece que estoy recibiendo este conjunto de errores:
Traceback (most recent call last):
File "DA_test_pred.py", line 24, in <module>
logits, _ = inception.inception_v1(processed_images, num_classes=1001, is_training=False)
File "/home/deepankar1994/Desktop/MTP/TensorFlowEx/TFSlim/models/slim/nets/inception_v1.py", line 290, in inception_v1
net, end_points = inception_v1_base(inputs, scope=scope)
File "/home/deepankar1994/Desktop/MTP/TensorFlowEx/TFSlim/models/slim/nets/inception_v1.py", line 96, in inception_v1_base
net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 1053, in concat
dtype=dtypes.int32).get_shape(
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 651, in convert_to_tensor
as_ref=False)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 716, in internal_convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/constant_op.py", line 176, in _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/constant_op.py", line 165, in constant
tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 367, in make_tensor_proto
_AssertCompatible(values, dtype)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 302, in _AssertCompatible
(dtype.name, repr(mismatch), type(mismatch).__name__))
TypeError: Expected int32, got list containing Tensors of type ''_Message'' instead.
Esto es extraño porque todo este código es de su guía oficial. Soy nuevo en TF y cualquier ayuda sería apreciada.
Obtuve el mismo error cuando hice el trabajo.
encontre eso
logits = tf.nn.xw_plus_b(tf.concat(outputs, 0), w, b)
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
labels=tf.concat(train_labels, 0), logits=logits))
La salida es la shape=(10, 64, 64)
.
El código quiere salidas concat [0] a salidas [9] => obtener una nueva forma (640,64).
Pero la API "tf.concat" puede no permitir hacer esto.
(train_labels mismo a esto)
Entonces escribo a
A = tf.concat(0,[outputs[0],outputs[1]])
A = tf.concat(0,[A,outputs[2]])
A = tf.concat(0,[A,outputs[3]])
A = tf.concat(0,[A,outputs[4]])
A = tf.concat(0,[A,outputs[5]])
A = tf.concat(0,[A,outputs[6]])
A = tf.concat(0,[A,outputs[7]])
A = tf.concat(0,[A,outputs[8]])
A = tf.concat(0,[A,outputs[9]])
B = tf.concat(0,[train_labels[0],train_labels[1]])
B = tf.concat(0,[B,train_labels[2]])
B = tf.concat(0,[B,train_labels[3]])
B = tf.concat(0,[B,train_labels[4]])
B = tf.concat(0,[B,train_labels[5]])
B = tf.concat(0,[B,train_labels[6]])
B = tf.concat(0,[B,train_labels[7]])
B = tf.concat(0,[B,train_labels[8]])
B = tf.concat(0,[B,train_labels[9]])
logits = tf.nn.xw_plus_b(tf.concat(0, A), w, b)
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
labels=tf.concat(0, B), logits=logits))
¡Puede funcionar!
Tengo el mismo problema cuando uso el 1.0 liberado y podría hacerlo funcionar sin tener que retroceder en una versión anterior.
El problema es causado por un cambio en la API. Esa discusión me ayudó a encontrar la solución: Grupo de Google> Cambios recientes de API en TensorFlow
Solo tienes que actualizar toda la línea con tf.concat
por ejemplo
net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])
debe cambiarse a
net = tf.concat([branch_0, branch_1, branch_2, branch_3], 3)
Nota:
Pude usar los modelos sin problema. Pero todavía tengo error después cuando quiero cargar el peso pre-entrenamiento. Parece que el módulo delgado sufrió varios cambios desde que crearon el archivo de punto de control. El gráfico creado por el código y el presente en el archivo de punto de control fueron diferentes.
Nota 2:
Pude usar los pesos pretrain para inception_resnet_v2 agregando a todos la capa biases_initializer=None
escribir explícitamente el nombre de los argumentos resuelve el problema.
en lugar de
net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])
utilizar
net = tf.concat(axis=3, values=[branch_0, branch_1, branch_2, branch_3])