python - 有没有办法将神经网络层中的每个节点乘以特定值?(凯拉斯)
问题描述
我正在尝试修改“用于可区分特征选择和重建的具体自动编码器”的工作。
这是用于选择重要变量的输入层之后的具体选择器层的 Keras 代码。
如果你看下面的代码,返回值 Y 成为 X 和 K.transpose(self.selections) 的内积,内积值与节点数一样多。
class ConcreteSelect(Layer):
def __init__(self, output_dim, start_temp = 10.0, min_temp = 0.1, alpha = 0.99999, **kwargs):
self.output_dim = output_dim
self.start_temp = start_temp
self.min_temp = K.constant(min_temp)
self.alpha = K.constant(alpha)
super(ConcreteSelect, self).__init__(**kwargs)
def build(self, input_shape):
self.temp = self.add_weight(name = 'temp', shape = [], initializer = Constant(self.start_temp), trainable = False)
self.logits = self.add_weight(name = 'logits', shape = [self.output_dim, input_shape[1]], initializer = glorot_normal(), trainable = True)
super(ConcreteSelect, self).build(input_shape)
def call(self, X, training = None):
uniform = K.random_uniform(self.logits.shape, K.epsilon(), 1.0)
gumbel = -K.log(-K.log(uniform))
temp = K.update(self.temp, K.maximum(self.min_temp, self.temp * self.alpha))
noisy_logits = (self.logits + gumbel) / temp
samples = K.softmax(noisy_logits)
discrete_logits = K.one_hot(K.argmax(self.logits), self.logits.shape[1])
self.selections = K.in_train_phase(samples, discrete_logits, training)
Y = K.dot(X, K.transpose(self.selections))
return Y
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
这可以用图形表示为 image1,其中 K.transpose(self.selections) 表示为 m。
但我想要的只是 K.transpose(self.selections) 的一个向量,
并将每个输入值 (X) 和 K.transpose(self.selections) 值相乘,然后发送到每个节点,如 image2 所示。(一个输入一个连接)
正如您可能猜到的那样,我是 keras 的新手,需要一些帮助。如果您需要进一步澄清我的问题,我会告诉您。
解决方案
推荐阅读
- python - 从python中的列表中删除类似的字典
- php - Laravel 错误:file_put_contents 无法打开流:没有这样的文件或目录
- laravel - 当我尝试将文件保存到 storage/images 文件夹时,如何解决存储请求表单 laravel api 的 500 错误
- javascript - 当库 B 依赖于 A 时,为什么要安装库 A(react-router) 和 B (react-router-dom)?
- java - 从 Android Studio 中的网站获取完整加载的 HTML 内容
- javascript - React CSS 模块 - 一些 CSS 未应用(用于 NavLink 组件设置的“活动”类)
- discord - 如何使通过文本上传的图像被机器人嵌入并将其上传到不同的频道
- html - 从 Angular 6.0+ 日历中的单独文件加载模板
- c# - 通过 Unity 中的观察者模式增加分数
- node.js - mongo db过滤对象数组中的结果