如何解决如何在 Keras (Tensorflow2) 中为多损失和多输出模型构建数据生成器/序列?
我正在研究一个模型,其中有两个损失和两个不同的输出。一个输出将 y
作为图像,就像 Autoencoder / U-Net 架构一样。另一个输出是简单的二元分类,取为 0/1。
所以我想说的是Siamese Based Unet
。基本上基于 mae
损失重建图像并从瓶颈层创建一个分支,以便它可以根据欧氏距离预测 2 个图像是否相似。
Keras
有一个 ImageDataGenerator
,您可以在其中使用 class_mode='input'
生成相应的图像作为 y 标签,还可以使用 class_mode=binary
生成列中给定的 0/1 值.但是我怎样才能在同一个生成器中生成这两个东西。问题是 Siamese Branch
将同时接受 2 个输入。
解决方法
您是否检查过 Sequence object .它允许创建自定义数据生成器。这个想法是子类化 Sequence 然后覆盖方法 len、getitem。 len 应返回序列中的批次数。返回源和目标对的逻辑写在 getitem 中。它应该返回一批数据。如果是多输入模型,您可以编写 getitem 使其输出数据包括映射到模型输入层的字典(key=layername)。对于输出张量也是如此。更多信息可以在我在上面添加的官方文档的链接中找到。最好的
编辑
根据我对您的问题的理解,这是要点。:
class Dataset(Sequence):
def __init__(self,filenames,batchsize,shape):
self.filenames = filenames # List of filenames
self.batchsize = batchsize
self.shape = shape # Shape to which image should be
# resized
def __len__(self):
return len(self.filenames) // batchsize
def __getitem__(self,idx):
i = idx * self.batchsize
X_1 = np.zeros((self.batchsize,self.shape[0],self.shape[1],3)
y = np.zeros((self.batchsize,--,...,--)) # Depends on
# your target choice
filenames = self.filenames[i:i+self.batchsize]
for index,filename in enumerate(filenames):
image = cv2.imread(filename)
# Preprocess
image = your_preprocess(image)
X[index] = image
# You can include your pipeline for other
# Input also.
# Similarly obtain target values and load to y.
return {"layername": X_1,"layername": X_2},{"layername": y}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。