tensorflow中怎样实现自己特定要求的网络层,例如一个稀疏结构的全连接,固定一些权值w为0

这个不太清楚,我可能得去查查文档才行,不过我这里有很大的疑问, FC 稀疏的话不是会浪费计算资源吗?inception 里面都设计专门的结构来减少FC的稀疏性, 什么样的场景希望FC的weights是要稀疏的?
■网友
稀疏的全连接层我想了好久还没理解物理含义,如果是避免过拟合临时弃用隐节点,dropout应该是更好的方案,如果是希望输入层的部分weights为0,那么这部分特征不作为输入即可。至于如何定义一个新的网络结构,我提供些思路。如果是类似全连接层,我们其实并没有调用TensorFlow类似tf.full_connect()这样的接口,而是使用tf.mul()和tf.add()的矩阵运行,因为矩阵运算是全部相乘因此矩阵中的参数也就是全连接层的weights。你可以很容易实现一个类似全连接层的网络结构,例如X * weights + 2 * bias,这是全连接的变形,我们每次都加上两个bias(实际上并没有特别的效果)。如果是RNN或者LSTM新的网络结果,我们通过TensorFlow封装的tf.rnn()库也可以看到具体的实现,这里我们需要用Python定义一个新的op,在Python或C++层实现这个op的forward计算和gradient计算,推荐参考StackOverflow这个提问 Tensorflow: How to make a custom activation function with only python? 。实现新的op,我们可以在定义网络的任意一部分调用,例如前面链接是实现一个新的激活函数,我们也可以实现任意的矩阵运算或者是类似RNN的包含状态的运算,当然如果是Google paper中提到的算法和模型很快也会有Google开发者实现的op供大家直接使用。
■网友
可以在损失函数中加上惩罚项进行稀疏约束,一般用KL散度作为惩罚项


    推荐阅读