标签的Keras图像相似性模型问题

时间:2019-06-28 02:43:03

标签: python tensorflow keras training-data

我正在研究一个深层的图像相似性模型,我希望获得一些帮助。

我不断收到此错误,不知道该如何处理或如何解决。

Input arrays should have the same number of samples as target arrays. Found 100 input samples and 3 target samples.

我将图像分为三个文件,然后读取它们。然后,我具有三个数组(锚定,正数和负数)。我拥有的标签将全部相同y = [1,1,0],即[a,p,n] 这是正确的方法吗?

我正在关注此博客/代码https://medium.com/@akarshzingade/image-similarity-using-deep-ranking-c1bd83855978

模型和损失函数相同,唯一的区别是加载的数据,加载方式以及模型的训练方式。

# Alist of images for anchor similar and negative
# Read in all the image paths
anchor = np.load("list/anchor_list.npy")
pos = np.load("list/positvie_list.npy")
neg = np.load("list/negative_list.npy")

def load_img(path):
    img = image.load_img(path, target_size=(224, 224))
    img = image.img_to_array(img)
    img = np.array(img)
    return img

a = []
p = []
n = []
# Read in sampple of the images
for i in range(0, 100):
    a.append(load_img(os.path.join(data_dir, anchor[i])))
    p.append(load_img(os.path.join(data_dir, pos[i])))
    n.append(load_img(os.path.join(data_dir, neg[i])))

a = np.array(a)
p = np.array(p)
n = np.array(n)
y = [1, 1, 0]

deep_rank_model.fit([a, p, n], y,
                batch_size=batch_size,
                epochs=10,
                verbose = 1)

在此方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如错误所述,输入数组[a,p,n]的大小为(100x3),但您的输出数组y的大小为(1x3)。因此,该模型无法将输入数组与其对应的输出配对。

根据您的解释,我知道a-> 1,p-> 1和n-> 0,并且每个类别中有100个样本。因此,您只需要将输出数组乘以100。请尝试以下操作:

deep_rank_model.fit([a, p, n], [y]*100,
            batch_size=batch_size,
            epochs=10,
            verbose = 1)

希望这行得通!