gpt4 book ai didi

tensorflow - 如何在 Tensorflow 中构建 Siamese 网络的输入管道?

转载 作者:行者123 更新时间:2023-12-02 00:51:12 25 4
gpt4 key购买 nike

目前,我正在尝试使用 Tensorflow 实现论文中的实验:Siamese Neural Networks for One-shot Image Recognition

图像集是 Omniglot,其中每个图像都可以作为 [105,105,1] 数组加载。

由于 Siamese 网络的输入是一对具有相同或不同类别的图像,因此我需要对数据集进行如下预处理。

我将 Omniglot 数据集传输到 [n,20,105,105,1] numpy 数组中,其中 n 代表类的数量,其中每个类有 20 个大小为 [105,105,1] 的图像示例。

然后我实现一个函数来返回一对图像:

def get_example(dataset):
"""
get one pair of images
:param dataset: the set, eg. training set
:return: when label is 1, return a concatenated array of two imgs from same character
when label is 0, return a concatenated array of two imgs from different characters
"""
# randint(0, x) generates 1 random numbers from 0 ~ x
set_upper = len(dataset)
set_lower = 0

# sample(range(0, 20), 2) generates 2 random numbers from 0 ~ 19
char_upper = 20
char_lower = 0

label = randint(0, 1)

if label:
# randomly select one character from the set
char = randint(set_lower, set_upper-1)
rand_char = dataset[char]

# randomly select two different images from the character
a = b = 0
while a == b:
a, b = sample(range(char_lower, char_upper), 2)
img_a = rand_char[a]
img_b = rand_char[b]

else:
# randomly select two characters from the set
c1, c2 = sample(range(set_lower, set_upper), 2)
rand_char1 = dataset[c1]
rand_char2 = dataset[c2]

# randomly select two images from two characters
a, b = sample(range(char_lower, char_upper), 2)
img_a = rand_char1[a]
img_b = rand_char2[b]

img_input = np.concatenate((img_a, img_b), axis=0)
img_input = img_input[..., newaxis]
return img_input, label

所以这是我的问题,如何将图像分组,以及如何将它们输入到 Tensorflow 中的模型中?

最佳答案

您应该能够创建数据集,如 https://www.tensorflow.org/guide/datasets#consuming_numpy_arrays 中所述。并使用标准 tf.data.Dataset 操作(例如 shufflebatch)来实现您的目标。

关于tensorflow - 如何在 Tensorflow 中构建 Siamese 网络的输入管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157763/

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