我有一个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_fully_connected)
结尾
我得到2个.tfr文件作为输出( training 和 test )。
现在假设您有一张照片,并想知道120张样本中更相似的图片是什么来识别它。我该怎么办?
train_prediction tensor具有此格式shape=(3, 120), dtype=float32
120是类别的总数
在我正在阅读的书中遗憾的是没有任何迹象,本章结束了这个训练有素的模型我不知道如何在实际应用中使用,并且在互联网上搜索有很多类似的样本在同一点结束。
答案 0 :(得分:0)
我不明白你的问题。通过120个样本,你的意思是每个班级有120个班级,每个班级的图像很少吗?在这种情况下,这是分类问题,您可以使用输入作为图像训练用于分类的模型,并输出作为输入将属于120个类别之一的概率(+不属于任何类别的额外类别)。在这种情况下,完全连接的层被送入softmax函数,该函数输出120个类的概率,这基本上是长度为120的向量。但是为此,每个类需要多个训练样例。
如果您只有120张图像,并且您需要知道另一张测试图像是否与这些图像中的一张图像相似,那么您可以在完全连接图层之前为已经训练过的神经网络的120张图像获取图层的输出矢量在较大的图像样本(如初始模型)上,然后测试图像矢量与120个矢量的相似性。
我使用上述技术here举办了一个简单易用的演示。检查是否适合你,否则更多地改进问题陈述。