是否需要为一批示例定义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 (将#修改为@)