【问题标题】:How to implement a neural network model, with fixed correspondence between the input layer and the first hidden layer specified?如何实现一个神经网络模型,输入层和第一个隐藏层之间有固定的对应关系?
【发布时间】:2018-01-20 12:18:00
【问题描述】:

我想实现一个前馈神经网络,与通常的唯一区别是我手动控制输入特征和第一个隐藏层神经元之间的对应关系。例如,在输入层我有特征 f1, f2, ..., f100,在第一个隐藏层我有 h1, h2, ..., h10。我希望前 10 个功能 f1-f10 输入 h1,f11-f20 输入 h2,等等。

从图形上看,与常见的深度学习技术 dropout 不同,它通过随机省略隐藏的 节点 来防止过度拟合,这里我想要的是 静态(固定)省略输入和隐藏之间的某些隐藏边缘

我正在使用 Tensorflow 实现它,但没有找到指定此要求的方法。我还查看了其他平台,例如 pytourch 和 theano,但仍然没有得到答案。任何使用 Python 实现的想法将不胜感激!

【问题讨论】:

    标签: python tensorflow neural-network deep-learning


    【解决方案1】:

    我最终通过强制对应于第一层的权重矩阵的某些块为常数零来实现这个要求。也就是说,我不仅定义了w1 = tf.Variables(tf.random_normal([100,10])),还定义了十个 10 x 1 的权重向量并将它们与零连接以形成一个块对角矩阵作为最终的 w1。

    【讨论】:

    【解决方案2】:

    取下面的sn-p:

    #!/usr/bin/env python3
    
    import tensorflow as tf
    
    features = tf.constant([1, 2, 3, 4])
    
    hidden_1 = tf.constant([1, 1])
    hidden_2 = tf.constant([2, 2])
    
    res1 = hidden_1 * tf.slice(features, [0], [2])
    res2 = hidden_2 * tf.slice(features, [2], [2])
    
    final = tf.concat([res1, res2], axis=0)
    
    sess = tf.InteractiveSession()
    print(sess.run(final))
    

    假设特征是您的输入特征,tf.slice 将它们拆分为单独的切片,每个切片在该点都是一个单独的图形(在本例中,它们与 hidden_​​1 和 hidden_​​2 相乘),最后它们被合并和tf.concat一起回来。

    结果是 [1, 2, 6, 8],因为 [1, 2] 与 [1, 1] 相乘,[2, 3] 与 [2, 2] 相乘。

    下面是生成的图表:

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2020-09-20
      • 2012-03-21
      • 2014-07-24
      相关资源
      最近更新 更多