Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #2525

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 6月 20, 2017 by saxon_zh@saxon_zhGuest

Sharing parameters in Siamese network, Siamese 网络中的参数共享问题

Created by: rulai-huiyingl

网络:siamese网络。给定一对输入,分别放入一个相同的网络,得到两个不同的embedding,然后求两个embedding的相似度(和recommender system的例子相似只不过两个不同输入穿过相同的网络得到不同输出)。 使用paddle 0.10.0.

问题:

  1. 用下面这个网络算相似度的时候 cosine layer算出来不论输入如何结果都是1(是5如果scale=5)。 如果不把两个fc用同样的名字就没这个问题。
def main():
    ##some initialization & get input here
    ##input1 and input2 each is a dense float number vector(e.g. word embedding)

    fc1_o1 = paddle.layer.fc(input=input1,
                             size=hidden_size,
                             name="fc1")
    fc1_o2 = paddle.layer.fc(input=input2,
                             size=hidden_size,
                             name="fc1")    ##Here the parameter names are the same
  
    cosine_sim = paddle.layer.cos_sim(a=fc1_o1, b=fc1_o2, size=1, scale=5)
    y = paddle.layer.data(name='similarity', type=paddle.data_type.dense_vector(1))
    loss = paddle.layer.mse_cost(input=cosine_sim, label=y)
    parameters = paddle.parameters.create(loss)

我是在训练程序运行的时候设置pdb断点并且infer想观察的变量来观察网络的输出。这里抓取了fc1_o1(v1)和fc1_o2(v2)(两个直接输入到paddle.layer.cos_sim的变量),以及算出来的cosine值。作为比较我自己另外单独用scipy给v1和v2算了cosine 相似度

    if isinstance(event, paddle.event.EndIteration):
        v1 = paddle.infer(output_layer=fc1_o1,
                                  parameters=parameters,
                                  input=test_data[:1],
                                  feeding=infer_feed)
        v2 = paddle.infer(output_layer=fc1_s2,
                                  parameters=parameters,
                                  input=test_data[:1],
                                  feeding=infer_feed)
        cos = paddle.infer(output_layer=cosine_sim,
                                  parameters=parameters,
                                  input=test_data[:1],
                                  feeding=infer_feed)
        pdb.set_trace()    #python hangs up here and I check the values

十分困惑的是,看到的v1和v2变量是不同的(我的例子里大概0.8的相似度),不过paddle.layer.cosine算出来是1......照理说如果v1 v2infer出来不同,那么网络的设置应该是对的。但是为什么cosine layer仿佛一直在算两个一模一样的输入的相似度呢?

2. 有没有更方便合理的打印变量值的方法? 

十分感谢!

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#2525
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7