python-3.x - 如何为图像分类创建多输入卷积神经网络模型?
问题描述
我是深度学习的初学者,希望您能帮助我解决我的问题。
我想创建一个 CNN 模型,它接受两个图像输入并产生一个输出,即两个图像的类。该模型从数据集类型 1 中获取一张图像,从数据集类型 2 中获取一张图像。我有两个数据集:type1和type2,每个数据集包含相同数量的类,但是数据集type1中每个类的图像数量高于数据集type2中每个类的图像数量。以下是数据集的结构。
模型应该从 Type1 数据集中获取一张图像,从 Type2 数据集中获取一张图像,然后将这些图像分类到一个类(ClassA 或 ClassB 或------)。
Type1 dataset
|Train
|ClassA
|image1
|image2
|image3
|image4
-----
|ClassB
|image1
|image2
|image3
|image4
-----
|ClassC
|image1
|image2
|image3
|image4
-----
|ClassD
|image1
|image2
|image3
|image4
-----
----------------
|Validate
-----------
|Test
--------------
Type2 dataset
|Train
|ClassA
|image1
|image2
-----
|ClassB
|image1
|image2
-----
|ClassC
|image1
|image2
-----
|ClassD
|image1
|image2
-----
----------------
|Validate
-----------
|Test
--------------
所以,我想创建一个输入两个图像(来自类型 1 和 2)的模型,只要它们来自同一个类。另外,我希望 type1 中的每个图像都与同一类中 type2 中的每个图像配对。我怎样才能做到这一点???
编码:
in1 = Input(...)
x = Conv2D(...)(in1)
--------
--------
out1 = Dense(...)(x)
in2 = Input(...)
x = Conv2D(...)(in2)
--------
--------
out2 = Dense(...)(x)
concatenated_layer = concatenate([out1, out2]) # merge the outputs of the two models
output_layer = Dense(no_classes, activation='softmax', name='prediction')(concatenated_layer)
modal= Model(inputs=[in1, in2], outputs=[output_layer])
input_imgen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
rotation_range=5.,
horizontal_flip = True)
test_imgen = ImageDataGenerator()
def generate_generator_multiple(generator,dir1, dir2, batch_size, img_height,img_width):
genX1 = generator.flow_from_directory(dir1,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
genX2 = generator.flow_from_directory(dir2,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
while True:
X1i = genX1.next()
X2i = genX2.next()
yield [X1i[0], X2i[0]], X2i[1] #Yield both images and their mutual label
inputgenerator=generate_generator_multiple(generator=input_imgen,
dir1=train_iris_data,
dir2=train_face_data,
batch_size=32,
img_height=224,
img_width=224)
testgenerator=generate_generator_multiple(generator=test_imgen,
dir1=valid_iris_data,
dir2=valid_face_data,
batch_size=1,
img_height=224,
img_width=224)
解决方案
推荐阅读
- python - 为什么函数的执行时间不恒定?
- python - 将 pyqtgraph linearregionitem 与 plotitem 的轴连接时出现递归错误
- laravel - Laravel 雄辩与归档表
- c - 图像直方图均衡化
- google-apps-script - 应用程序脚本检测外部电子表格中的新行插入并获取值
- linux - GrADS -- libssl.so.10:错误的 ELF 类:ELFCLASS64
- javascript - 使用查询字符串而不是公共 URL,Office365 添加内联图像
- connect - Debezium连接器插入kafka密钥作为avro?
- woocommerce - 机器人、Woo 和添加到购物车
- architecture - 业务流程监控方法