我正在尝试从用宽面条写的blog post中复制Keras中的模型。该数据集由视网膜图像组成(每位患者2张图像,因为每位患者都有2只眼睛),该图像将分为5类。
到目前为止,我将每个图像分别提供给我的模型,但在某个时候,我想合并属于同一患者的图像,这正是博客文章所做的。博客文章本身可能会更好地解释这一点:
我尝试做的一件事是为两只眼睛的每一个(或什至是输入层)合并第一个卷积或合并层的输出。然后从理论上讲,卷积层可以检测到左右眼中的相似模式。
问题是我完全不知道如何在Keras中实现这一目标。
到目前为止,我一直在尝试(尝试复制此Lasagne code):
model = Sequential([
Conv2D(filters=32, kernel_size=(7, 7), strides=(2,2),
kernel_initializer=Orthogonal(1.0), bias_initializer=Constant(0.1),
data_format='channels_last',
input_shape=(512, 512, 3)), # Input layer
LeakyReLU(leakiness),
MaxPool2D(pool_size=(3,3), strides=(2,2)),
...
... # A number of repetitions of Conv2D, LeakyRelU, MaxPool2d
...
# Interesting part:
# (at this point, I expect the input to have a batch_size of 64 and 256 channels)
Reshape(target_shape=(32, -1)), # Batch_size // 2 = 32, merge eyes
...])
如您所见,我正在尝试通过将batch_size除以2来合并Reshape层中每个患者的眼睛。我相信这是Lasagne的原始代码对此code (link to line 295)所做的工作:
# Combine representations of both eyes.
layers.append(
nn.layers.ReshapeLayer(layers[-1], shape=(batch_size // 2, -1)))
我不确定在Keras中这样做是否有意义,因为在reshape doc中,似乎我们不应该输入批量大小。
我对Keras并不陌生,我对合并具有相同批次大小的两个图像的想法非常困惑,因此将批次大小减少了一半。
有人可以解释一下如何实现吗?