如何解决是否需要为一批示例定义tf.keras.Layer的call函数?
我正在使用非传统的正向传播步骤实现自定义层。每个输入是3维训练示例,而输出是1维数组。输入是一个形状为(10000,3)的numpy数组。定制层应该具有32个隐藏单元,每个单元具有3个参数:w1,w2,w3。如果x1,x2,x3是输入的3个特征,则在前向传播步骤中,每个单元必须计算
(w1-x1)*(w2-x2)*(w3-x3)
。为了用32个单位实现此操作,我初始化了(3,32)
形状的权重矩阵。在call方法中,我为一个输入[[x1 x2 x3]]
实现了此操作。问题是当(x,3)
的批量输入x>1
时,它不起作用。错误为InvalidArgumentError: Incompatible shapes: [32,3] vs. [2,3] [Op:Sub] name: boxes_dimensions/sub/
。
这是我的实现:
class boxes_dimensions(Layer):
def __init__(self,units,input_dim):
super(boxes_dimensions,self).__init__()
self.w = self.add_weight(shape=(input_dim,units),initializer = preload_boxes)
def call(self,inputs):
return tf.reduce_prod(tf.transpose((tf.transpose(self.w) - inputs)),axis=0,keepdims=True)
mylayer = boxes_dimensions(32,3)
mylayer(tf.ones((2,3))
是否需要批量执行操作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。