gpt4 book ai didi

python - 如何将我自己的图像输入 Cifar10 训练模型并获得标签作为输出?

转载 作者:太空狗 更新时间:2023-10-30 02:57:18 25 4
gpt4 key购买 nike

我正在尝试使用基于 Cifar10 tutorial 的训练模型并且想喂它带有外部图像 32x32(jpg 或 png)。
我的目标是能够将标签作为输出。换句话说,我想为网络提供一个大小为 32 x 32、3 个 channel 且没有标签的 jpeg 图像作为输入,并让推理过程给我 tf.argmax (logits, 1).
基本上我希望能够在外部图像上使用经过训练的 cifar10 模型,看看它会吐出什么类。

我一直在尝试根据 Cifar10 教程来做这件事,不幸的是总是有问题。特别是 session 概念和批处理概念。

如能提供任何有关 Cifar10 的帮助,我们将不胜感激。

以下是到目前为止已实现的代码,但存在编译问题:

#!/usr/bin/env python

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from datetime import datetime
import math
import time

import tensorflow.python.platform
from tensorflow.python.platform import gfile
import numpy as np
import tensorflow as tf

import cifar10
import cifar10_input
import os
import faultnet_flags
from PIL import Image

FLAGS = tf.app.flags.FLAGS

def evaluate():

filename_queue = tf.train.string_input_producer(['/home/tensor/.../inputImage.jpg'])

reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)

input_img = tf.image.decode_jpeg(value)

init_op = tf.initialize_all_variables()

# Problem in here with Graph / session
with tf.Session() as sess:
sess.run(init_op)

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)

for i in range(1):
image = input_img.eval()

print(image.shape)
Image.fromarray(np.asarray(image)).show()

# Problem in here is that I have only one image as input and have no label and would like to have
# it compatible with the Cifar10 network
reshaped_image = tf.cast(image, tf.float32)
height = FLAGS.resized_image_size
width = FLAGS.resized_image_size
resized_image = tf.image.resize_image_with_crop_or_pad(reshaped_image, width, height)
float_image = tf.image.per_image_whitening(resized_image) # reshaped_image
num_preprocess_threads = 1
images = tf.train.batch(
[float_image],
batch_size=128,
num_threads=num_preprocess_threads,
capacity=128)
coord.request_stop()
coord.join(threads)

logits = faultnet.inference(images)

# Calculate predictions.
#top_k_predict_op = tf.argmax(logits, 1)

# print('Current image is: ')
# print(top_k_predict_op[0])

# this does not work since there is a problem with the session
# and the Graph conflicting
my_classification = sess.run(tf.argmax(logits, 1))

print ('Predicted ', my_classification[0], " for your input image.")


def main(argv=None):
evaluate()

if __name__ == '__main__':
tf.app.run() '''

最佳答案

首先是一些基础知识:

  1. 首先定义图表:图像队列、图像预处理、convnet 推理、top-k 准确度
  2. 然后创建一个 tf.Session() 并在其中工作:启动队列运行器,并调用 sess.run()

你的代码应该是这样的

# 1. GRAPH CREATION 
filename_queue = tf.train.string_input_producer(['/home/tensor/.../inputImage.jpg'])
... # NO CREATION of a tf.Session here
float_image = ...
images = tf.expand_dims(float_image, 0) # create a fake batch of images (batch_size=1)
logits = faultnet.inference(images)
_, top_k_pred = tf.nn.top_k(logits, k=5)

# 2. TENSORFLOW SESSION
with tf.Session() as sess:
sess.run(init_op)

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)

top_indices = sess.run([top_k_pred])
print ("Predicted ", top_indices[0], " for your input image.")

编辑:

正如@mrry 所建议的,如果您只需要处理单个 图像,您可以删除队列运行器:

# 1. GRAPH CREATION
input_img = tf.image.decode_jpeg(tf.read_file("/home/.../your_image.jpg"), channels=3)
reshaped_image = tf.image.resize_image_with_crop_or_pad(tf.cast(input_img, width, height), tf.float32)
float_image = tf.image.per_image_withening(reshaped_image)
images = tf.expand_dims(float_image, 0) # create a fake batch of images (batch_size = 1)
logits = faultnet.inference(images)
_, top_k_pred = tf.nn.top_k(logits, k=5)

# 2. TENSORFLOW SESSION
with tf.Session() as sess:
sess.run(init_op)

top_indices = sess.run([top_k_pred])
print ("Predicted ", top_indices[0], " for your input image.")

关于python - 如何将我自己的图像输入 Cifar10 训练模型并获得标签作为输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com