python - 顺序模型张量流中的自定义层
问题描述
我正在尝试为我的模型创建一个自定义层,它可以用于 Keras 的经典 Dense 层。这是我的自定义层:
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.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, input):
return tf.matmul(input, self.kernel)
它现在没有做任何“自定义”。
但是当我将它添加到我的模型中时
def build_model():
model = keras.Sequential([
MyDenseLayer(10)(normed_x_train),
layers.Activation(tf.nn.relu),
layers.Dense(1, activation=tf.nn.relu)
])
return model
我明白了:
The added layer must be an instance of class Layer. Found: tf.Tensor(
[....])
因为可能我正在直接创建类自定义层的对象。但是我在 tf 文档中没有找到如何添加其他属性以使其作为普通层工作,即类似于layers.Dense(100, activation=tf.nn.relu)
有没有办法让它像那样工作?
解决方案
正如他们在评论中所说,在定义模型时不要引入输入。那是:
def build_model():
model = keras.Sequential([
MyDenseLayer(10),
keras.layers.Activation(tf.nn.relu),
keras.layers.Dense(1, activation=tf.nn.relu)
])
return model
然后你可以尝试:
model = build_model()
model(tf.random.uniform((100, 100)))
PS:问题已经存在好几天了,但是@Marco Cerliani 解决了这个问题(无论如何我都可以删除它)
推荐阅读
- jquery - 按钮不能使用 jQuery 处理 AJAX 加载的内容?
- ruby-on-rails - Rails 多个参数允许调用
- java - 这个 manifest/jar 命令有什么问题?
- c# - 控制器创建正确的路由,使两者都能正常工作
- python - 使用python匹配文件字符串
- r - 贝叶斯分层 beta 回归:Jags 误差 - 维度不匹配
- r - 如何将数据从LabVIEW连续发送到R?(代码帮助)
- java - 通过使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会在 H2 DB 中将用户设置为自动增量
- react-native - 在 iOS 上使用 wix 导航进行 codepush
- css - 如何使用引导程序填满一行内容的宽度