我目前正在尝试使用Tensorflow和Keras实现this blog post中描述的三重态损失。我发现一个非常有用的git repo可以用作实现的起点。
回购代码中的第287行创建了Y_train
张量:
Y_train = np.random.randint(2, size=(1,2,anchors_t.shape[0])).T
随机填充0和1。
当模型在第293行拟合时,Y_train
被传递到createDataGen
方法中:
# This method uses data augmentation
model.fit_generator(generator=createDataGen(anchors_t,positives_t,negatives_t,Y_train,batch), steps_per_epoch=len(Y_train) / batch, epochs=1, shuffle=False, use_multiprocessing=True)
def createDataGen(X1, X2, X3, Y, b):
local_seed = T_G_SEED
genX1 = datagen.flow(X1,Y, batch_size=b, seed=local_seed, shuffle=False)
genX2 = datagen.flow(X2,Y, batch_size=b, seed=local_seed, shuffle=False)
genX3 = datagen.flow(X3,Y, batch_size=b, seed=local_seed, shuffle=False)
while True:
X1i = genX1.next()
X2i = genX2.next()
X3i = genX3.next()
yield [X1i[0], X2i[0], X3i[0]], X1i[1]
我在问自己以下问题:
为什么createDataGen
方法也返回X1i [1]?