2016-10-26 5 views
4

나는 tensorflow에서 cifar-10을 사용하여 단일 이미지에 대한 클래스를 예측하려고했습니다. Tensorflow 및 cifar 10, 단일 이미지 테스트

는이 코드를 찾았지만이 오류로 인해 실패 :

지정이 모두 텐서의 모양이 일치해야합니다. lhs shape = [18,384] rhs shape = [2304,384] 이것은 배치의 크기가 1이기 때문에 이해합니다. (expand_dims로 가짜 일괄 처리를 만듭니다.)

이 문제를 해결하는 방법을 알고 있습니까?

어디서나 검색했지만 해결책이 없습니다 .. 미리 감사드립니다!

from PIL import Image 
import tensorflow as tf 
from tensorflow.models.image.cifar10 import cifar10 
width = 24 
height = 24 

categories = ["airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck" ] 

filename = "path/to/jpg" # absolute path to input image 
im = Image.open(filename) 
im.save(filename, format='JPEG', subsampling=0, quality=100) 
input_img = tf.image.decode_jpeg(tf.read_file(filename), channels=3) 
tf_cast = tf.cast(input_img, tf.float32) 
float_image = tf.image.resize_image_with_crop_or_pad(tf_cast, height, width) 
images = tf.expand_dims(float_image, 0) 
logits = cifar10.inference(images) 
_, top_k_pred = tf.nn.top_k(logits, k=5) 
init_op = tf.initialize_all_variables() 
with tf.Session() as sess: 
saver = tf.train.Saver() 
ckpt = tf.train.get_checkpoint_state('/tmp/cifar10_train') 
if ckpt and ckpt.model_checkpoint_path: 
    print("ckpt.model_checkpoint_path ", ckpt.model_checkpoint_path) 
    saver.restore(sess, ckpt.model_checkpoint_path) 
else: 
    print('No checkpoint file found') 
    exit(0) 
sess.run(init_op) 
_, top_indices = sess.run([_, top_k_pred]) 
for key, value in enumerate(top_indices[0]): 
    print (categories[value] + ", " + str(_[0][key])) 

편집

내가 먼저 형상 없음으로 자리 표시자를 넣어했지만,이 오류가있어 : 새로운 변수 (local3을/무게)을 완벽하게 정의해야합니다의 모양을하지만, 대신 (?, 384). 내가 tf.Variable 또는 tf.get_variable에 의해 얻을 변수가 전체 정의 모양을 가지고 있어야하기 때문입니다 생각

from PIL import Image 
import tensorflow as tf 
from tensorflow.models.image.cifar10 import cifar10 
import itertools 
width = 24 
height = 24 

categories = [ "airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck" ] 

filename = "toto.jpg" # absolute path to input image 
im = Image.open(filename) 
im.save(filename, format='JPEG', subsampling=0, quality=100) 
x = tf.placeholder(tf.float32, [None, 24, 24, 3]) 
init_op = tf.initialize_all_variables() 
with tf.Session() as sess: 
# Restore variables from training checkpoint. 
    input_img = tf.image.decode_jpeg(tf.read_file(filename), channels=3) 
    tf_cast = tf.cast(input_img, tf.float32) 
    float_image = tf.image.resize_image_with_crop_or_pad(tf_cast, height, width) 
    images = tf.expand_dims(float_image, 0) 
    i = images.eval() 
    print (i) 
    sess.run(init_op, feed_dict={x: i}) 
    logits = cifar10.inference(x) 
    _, top_k_pred = tf.nn.top_k(logits, k=5) 
    variable_averages = tf.train.ExponentialMovingAverage(
     cifar10.MOVING_AVERAGE_DECAY) 
    variables_to_restore = variable_averages.variables_to_restore() 
    saver = tf.train.Saver(variables_to_restore) 
    ckpt = tf.train.get_checkpoint_state('/tmp/cifar10_train') 
    if ckpt and ckpt.model_checkpoint_path: 
     print("ckpt.model_checkpoint_path ", ckpt.model_checkpoint_path) 
     saver.restore(sess, ckpt.model_checkpoint_path) 
    else: 
     print('No checkpoint file found') 
     exit(0) 
    _, top_indices = sess.run([_, top_k_pred]) 
    for key, value in enumerate(top_indices[0]): 
     print (categories[value] + ", " + str(_[0][key])) 

답변

0

: 지금은 정말 잃었어요

.. 다음은 새로운 코드입니다. 코드를 확인하고 완전히 정의 된 모양을 지정할 수 있습니다.