Skip to content

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

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 4月 13, 2020 by saxon_zh@saxon_zhGuest

用paddle实现ranknet的几点疑问

Created by: yuyy0823

用paddle实现ranknet,有一些不太懂的地方,请相关同学指教下。 1、ranknet中左右两个网络结构共享参数,是否一定要通过设置param_attr和bias_attr中的name来实现,如果不设置这两个参数的名字的话,实际训练过程中是训练了两套参数吗? 2、测试时发现,将网络中的参数通过param_attr和bias_attr设置name后(如下图),调用fluid.io.save_inference_model接口分别保存左右两个模型时,发现参数文件的md5sum是一样的,但是模型文件的md5sum值不一样,这是什么原因导致的呢?

def half_ranknet_2(input):
    """
        rank_net
    """
    def wide_layer():
        """
            wide layer
        """
        out = fluid.layers.fc(input=input, size=64, name='fc0',
              param_attr=fluid.param_attr.ParamAttr(name="wide_w"),
              bias_attr=fluid.param_attr.ParamAttr(name="wide_b"))
        return out
    def deep_layer():
        """
            deep layer
        """
        hidden1 = fluid.layers.fc(input=input, size=256, act='relu', name='fc1',
                  param_attr=fluid.param_attr.ParamAttr(name="deep_w1"),
              bias_attr=fluid.param_attr.ParamAttr(name="deep_b1"))
        hidden2 = fluid.layers.fc(input=hidden1, size=128, act='relu', name='fc2',
                  param_attr=fluid.param_attr.ParamAttr(name="deep_w2"),
              bias_attr=fluid.param_attr.ParamAttr(name="deep_b2"))
        #hidden3 = fluid.layers.fc(input=hidden2, size=128, act='relu', name='fc3')
        out = fluid.layers.fc(input=hidden2, size=64, act='relu', name='fc3',
              param_attr=fluid.param_attr.ParamAttr(name="deep_w3"),
              bias_attr=fluid.param_attr.ParamAttr(name="deep_b3"))
        return out
    deep_out = deep_layer()
    wide_out = wide_layer()
    concat1 = fluid.layers.concat(input=[deep_out, wide_out], axis=1)
    hidden3 = fluid.layers.fc(input=concat1, size=64, act='relu', name='fc4',
              param_attr=fluid.param_attr.ParamAttr(name="deep_w4"),
              bias_attr=fluid.param_attr.ParamAttr(name="deep_b4"))
    hidden4 = fluid.layers.fc(input=hidden3, size=32, act='relu', name='fc5',
              param_attr=fluid.param_attr.ParamAttr(name="deep_w5"),
              bias_attr=fluid.param_attr.ParamAttr(name="deep_b5"))
    pre = fluid.layers.fc(input=hidden4, size=1, name='out',
          param_attr=fluid.param_attr.ParamAttr(name="out_w"),
              bias_attr=fluid.param_attr.ParamAttr(name="out_b"))
    pre_scale = fluid.layers.scale(pre, 1.0)
    return pre_scale

3、如果将2的网络参数的param_attr和bias_attr设置去掉,再调用fluid.io.save_inference_model接口分别保存左右两个模型时,发现先保存左模型再保存右模型,和先保存右模型再保存左模型时,参数文件的名称不一样,这又是为什么呢? 先保存左模型,再保存右模型

fluid.io.save_inference_model(model_save_dir + "_left", [feats2.name], [predict2], exe, train_prog)
fluid.io.save_inference_model(model_save_dir + "_right", [feats1.name], [predict1], exe, train_prog)

得到的参数文件如下(左右两个参数文件夹下的文件一致): fc0.b_0 fc0.w_0 fc1.b_0 fc1.w_0 fc2.b_0 fc2.w_0 fc3.b_0 fc3.w_0 fc4.b_0 fc4.w_0 fc5.b_0 fc5.w_0 __model__ out.b_0 out.w_0 先保存右模型,再保存左模型,得到的参数文件如下: fc0.b_1 fc0.w_1 fc1.b_1 fc1.w_1 fc2.b_1 fc2.w_1 fc3.b_1 fc3.w_1 fc4.b_1 fc4.w_1 fc5.b_1 fc5.w_1 __model__ out.b_1 out.w_1

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#23800
渝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