问题描述
我正在使用非传统的正向传播步骤实现自定义层。每个输入是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 (将#修改为@)