为了账号安全,请及时绑定邮箱和手机立即绑定

图像理解——CNN Triplet loss

图像理解——CNN Triplet loss

斯蒂芬大帝 2021-09-02 20:22:17
我是 NN 的新手,并试图创建一个简单的 NN 来理解图像。我尝试使用三重损失方法,但不断收到错误,让我觉得我错过了一些基本概念。我的代码是:def triplet_loss(x):  anchor, positive, negative = tf.split(x, 3)  pos_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, positive)), 1)  neg_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, negative)), 1)  basic_loss = tf.add(tf.subtract(pos_dist, neg_dist), ALPHA)  loss = tf.reduce_mean(tf.maximum(basic_loss, 0.0), 0)  return lossdef build_model(input_shape):  K.set_image_data_format('channels_last')  positive_example = Input(shape=input_shape)  negative_example = Input(shape=input_shape)  anchor_example = Input(shape=input_shape)  embedding_network = create_embedding_network(input_shape)  positive_embedding = embedding_network(positive_example)  negative_embedding = embedding_network(negative_example)  anchor_embedding = embedding_network(anchor_example)  merged_output = concatenate([anchor_embedding, positive_embedding, negative_embedding])  loss = Lambda(triplet_loss, (1,))(merged_output)  model = Model(inputs=[anchor_example, positive_example, negative_example],              outputs=loss)  model.compile(loss='mean_absolute_error', optimizer=Adam())  return modeldef create_embedding_network(input_shape):  input_shape = Input(input_shape)  x = Conv2D(32, (3, 3))(input_shape)  x = PReLU()(x)  x = Conv2D(64, (3, 3))(x)  x = PReLU()(x)  x = Flatten()(x)  x = Dense(10, activation='softmax')(x)  model = Model(inputs=input_shape, outputs=x)  return model使用以下方法读取每个图像:imageio.imread(imagePath, pilmode="RGB")以及每个图像的形状:(1024, 1024, 3)然后我使用我自己的三元组方法(只创建 3 组锚,正负)triplets = get_triplets(data)triplets.shape形状为(示例数量、三元组、x_image、y_image、通道数(RGB)):(20, 3, 1024, 1024, 3)然后我使用 build_model 函数:model = build_model((1024, 1024, 3))问题从这里开始:model.fit(triplets, y=np.zeros(len(triplets)), batch_size=1)对于这行代码,当我尝试训练我的模型时,我收到此错误:有关更多详细信息,我的代码在此协作笔记本中我使用的图片可以在这个驱动器中找到 为了无缝运行 - 将此文件夹放在我的驱动器/Colab 笔记本/图像/
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

对于任何也在苦苦挣扎的人

我的问题实际上是每个观察的维度。按照评论中的建议更改尺寸

(?, 1024, 1024, 3)

使用解决方案更新的 colab 笔记本

Ps - 我还将图片的大小更改为 256 * 256,以便代码在我的电脑上运行得更快。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信