gpt4 book ai didi

machine-learning - 如何在 Tensorflow 中使用经过训练的 CNN 模型进行对象识别

转载 作者:行者123 更新时间:2023-11-30 09:20:29 26 4
gpt4 key购买 nike

我有一个 CNN 模型,它使用一组 120 张图片进行训练。图像转换为 TFR 记录并用此方法标记

def write_records_file(dataset, record_location):
"""
dataset : dict(list)
Dictionary with each key being a label for the list of image filenames of its value.
record_location : str
Location to store the TFRecord output.
"""
writer = None

# Enumerating the dataset because the current index is used to breakup the files if they get over 100
current_index = 0
for breed, images_filenames in dataset.items():
for image_filename in images_filenames:
if current_index % 100 == 0:
if writer:
writer.close()

record_filename = "{record_location}-{current_index}.tfrecords".format(
record_location=record_location,
current_index=current_index)

writer = tf.python_io.TFRecordWriter(record_filename)
current_index += 1

image_file = tf.read_file(image_filename)
image = tf.image.decode_jpeg(image_file)
grayscale_image = tf.image.rgb_to_grayscale(image)
resized_image = tf.image.resize_images(grayscale_image, 250, 151)

image_bytes = sess.run(tf.cast(resized_image, tf.uint8)).tobytes()

image_label = breed.encode("utf-8")

example = tf.train.Example(features=tf.train.Features(feature={
'label': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_label])),
'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes]))
}))

writer.write(example.SerializeToString())

write_records_file(testing_dataset, "./output/testing-images/testing-image")
write_records_file(training_dataset, "./output/training-images/training-image")

整个模型+训练脚本以train_prediction = tf.nn.softmax(final_filled_connected)结束我得到 2 个 .tfr 文件作为输出(训练测试)。

现在假设你有一张图片,想知道 120 张图片样本中哪张图片更相似来识别它。我必须如何进行?

train_prediction 张量的格式为 shape=(3, 120), dtype=float32120 是类别总数

不幸的是,在我正在阅读的书中没有任何指示,并且章节以这个经过训练的模型结尾,我不知道如何在实际应用程序中使用它,并且在互联网上搜索有许多类似的示例在同一点结束。

最佳答案

我没听懂你的问题。 120 个样本是指有 120 个类,每个类的示例图像很少?在这种情况下,这就是分类问题,您训练一个分类模型,输入为图像,输出为输入属于 120 个类别之一的概率(+ 不属于任何类别的额外类别)。在这种情况下,全连接层被输入到 softmax 函数中,该函数输出 120 个类的概率,本质上是长度为 120 的向量。但为此,每个类需要多个训练示例。

如果您只有 120 张图像,并且您需要知道另一张测试图像是否与其中一张图像相似,您可以为已经训练过的神经网络获取这 120 张图像的完全连接层之前的层的输出向量在更大的图像样本(例如 inception 模型)上,然后仅测试测试图像向量与这 120 个向量的相似度。

我使用上述技术托管了一个简单易用的演示 here 。检查是否适合您,否则进一步完善问题陈述。

关于machine-learning - 如何在 Tensorflow 中使用经过训练的 CNN 模型进行对象识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618096/

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