0

我正在尝试为https://www.kaggle.com/moltean/fruits数据集建立一个连体网络。我从这个数据集中为每个班级挑选了 10 张图片。该数据集中共有 131 个类。我正在使用下面的模型来训练我的网络。但是,它无法收敛。我看到了一个奇怪的行为,在 3000 个 epoch 之后,无论我给出的输入对如何,我的结果都是 0.5000003,并且我的损失停止在 0.61。网络规格如论文中所述。我尝试更改以下内容,

  1. 将 Denes 层激活更改为 ReLU
  2. 导入 ResNet50 的“ImageNet”权重
  3. 尝试增加和减少学习率。

我还检查了批输入以查看正确的输入对 (x) 是否与正确的 y 值配对。但是,我认为我做的事情基本上是错误的。很高兴你能帮助我。谢谢 :)

该笔记本托管在 Kaggle https://www.kaggle.com/krishnaprasad96/siamese-network中。如果您对代码的某些部分的工作方式有疑问,请参阅https://medium.com/@krishnaprasad_54871/siamese-networks-line-by-line-explanation-for-beginners-55b8be1d2fc6

#Building a sequential model
input_shape=(100, 100, 3)
left_input = Input(input_shape)
right_input = Input(input_shape)

W_init = keras.initializers.RandomNormal(mean = 0.0, stddev = 1e-2)
b_init = keras.initializers.RandomNormal(mean = 0.5, stddev = 1e-2)

model = keras.models.Sequential([
    keras.layers.Conv2D(64, (10,10), activation='relu', input_shape=input_shape, kernel_initializer=W_init, kernel_regularizer=l2(2e-4)),
    keras.layers.MaxPooling2D(),
    keras.layers.Conv2D(128, (7,7), activation='relu', kernel_initializer=W_init, bias_initializer=b_init, kernel_regularizer=l2(2e-4)),
    keras.layers.MaxPooling2D(),
    keras.layers.Conv2D(128, (4,4), activation='relu', kernel_initializer=W_init, bias_initializer=b_init, kernel_regularizer=l2(2e-4)),
    keras.layers.MaxPooling2D(),
    keras.layers.Conv2D(256, (4,4), activation='relu', kernel_initializer=W_init, bias_initializer=b_init, kernel_regularizer=l2(2e-4)),
    keras.layers.MaxPooling2D(),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='sigmoid', kernel_initializer=W_init, bias_initializer=b_init, kernel_regularizer=l2(1e-3))
])

encoded_l = model(left_input)
encoded_r = model(right_input)

subtracted = keras.layers.Subtract()([encoded_l, encoded_r])
prediction = Dense(1, activation='sigmoid', bias_initializer=b_init)(subtracted)
siamese_net = Model(input=[left_input, right_input], output=prediction)

optimizer= Adam(learning_rate=0.0006)
siamese_net.compile(loss='binary_crossentropy', optimizer=optimizer)

plot_model(siamese_net, show_shapes=True, show_layer_names=True)
4

1 回答 1

0

我在 kaggle 上看到了笔记本。感谢您所提供的所有信息。但似乎溢出的培训和验证是错误的。由于该模型仅在最初的 91 个课程上进行训练。剩下的 40 节课呢?溢出的训练和验证应该来自同一类。假设我在一个班级中有 10 张图片。我可以使用 8 张图像进行训练,使用 2 张图像进行验证。训练和验证溢出应该在图像上而不是在类上。我也看不到测试脚本。如果您也可以提供,那将是一个很大的帮助。

于 2021-04-28T16:59:34.303 回答