tensorflow - 如何在自定义 keras 层中使用 keras 层
问题描述
我正在尝试编写自己的 keras 层。在这一层中,我想使用一些其他的 keras 层。有没有办法做这样的事情:
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.fc = tf.keras.layers.Dense(self.num_outputs)
def call(self, input):
return self.fc(input)
layer = MyDenseLayer(10)
当我做类似的事情时
input = tf.keras.layers.Input(shape = (16,))
output = MyDenseLayer(10)(input)
model = tf.keras.Model(inputs = [input], outputs = [output])
model.summary()
我如何使那里的密集人群可以训练?
解决方案
如果您查看有关如何添加自定义图层的文档,他们建议您使用该.add_weight(...)
方法。此方法在内部将所有权重放在self._trainable_weights
. 所以要做你想做的事,你必须首先定义你想要使用的 keras 层,构建它们,复制权重,然后构建你自己的层。如果我更新您的代码,它应该类似于
class mylayer(tf.keras.layers.Layer):
def __init__(self, num_outputs, num_outputs2):
self.num_outputs = num_outputs
super(mylayer, self).__init__()
def build(self, input_shape):
self.fc = tf.keras.layers.Dense(self.num_outputs)
self.fc.build(input_shape)
self._trainable_weights = self.fc.trainable_weights
super(mylayer, self).build(input_shape)
def call(self, input):
return self.fc(input)
layer = mylayer(10)
input = tf.keras.layers.Input(shape=(16, ))
output = layer(input)
model = tf.keras.Model(inputs=[input], outputs=[output])
model.summary()
推荐阅读
- python - 调用 sendmessage() 时 Python smtplib 挂起
- amazon-web-services - AWS Glue 动态帧更新列和爬网程序架构匹配
- java - 如何将 TextField 信息传递给 handle() 方法
- github - GitHub API:获取固定存储库
- python - 错误:遵循序列到序列教程的 Keras 中的维度冲突层
- javascript - 根据选中的单选按钮显示数组项的数据
- shell - GCP Shell 上的 Go 构建错误 - 本地 Go 构建包的权限被拒绝?
- vue.js - 如何在设置 v-model 时触发 select 的更改事件?
- html - 元素不在应有的位置(表格)
- c++ - 如何解决这个无限循环(做while循环)?