可训练矩阵乘法层

问题描述

我正在尝试在TensorFlow中构建一个自定义的)可训练的矩阵乘法层,但是事情没有解决……更准确地说,我的模型应该是这样的:

x -> A(x) x

其中A(x)是前馈网络,其值在n x n矩阵中(因此取决于输入x),而A(x)是通过矢量乘法的矩阵。

这是我编写的代码

class custom_layer(tf.keras.layers.Layer):
    
    def __init__(self,units=16,input_dim=32):
        super(custom_layer,self).__init__()
        self.units = units
    
    def build(self,input_shape):
        self.Tw1 = self.add_weight(name='Weights_1 ',shape=(input_shape[-1],input_shape[-1]),initializer='GlorotUniform',trainable=True)
        
        self.Tw2 = self.add_weight(name='Weights_2 ',(self.units)**2),trainable=True)
        
        self.Tb = self.add_weight(name='basies',),#PrevIoUsly 'ones'
                                    trainable=True)

        
    def call(self,input):
        # Build Vector-Valued feed-forward Network
        ffNN = tf.matmul(input,self.Tw1) + self.Tb
        ffNN = tf.nn.relu(ffNN)
        ffNN = tf.matmul(ffNN,self.Tw2) 
    
        
        # Map to Matrix
        ffNN = tf.reshape(ffNN,[self.units,self.units])

        # Multiply Matrix-Valued function with input data
        x_out = tf.matmul(ffNN,input)
        
        # Return Output
        return x_out

现在,我构建模型:

input_layer = tf.keras.Input(shape=[2])
output_layer  = custom_layer(2)(input_layer)
model = tf.keras.Model(inputs=[input_layer],outputs=[output_layer])

# Compile Model
#----------------#
# Define Optimizer
optimizer_on = tf.keras.optimizers.SGD(learning_rate=10**(-1))
# Compile
model.compile(loss = 'mse',optimizer = optimizer_on,metrics = ['mse'])

# Fit Model
#----------------#
model.fit(data_x,data_y,epochs=(10**1),verbose=0)

,然后我收到此错误消息:

InvalidArgumentError:  Input to reshape is a tensor with 128 values,but the requested shape has 4
     [[node model_62/reconfiguration_unit_70/Reshape (defined at <ipython-input-176-0b494fa3fc75>:46) ]] [Op:__inference_distributed_function_175181]

Errors may have originated from an input operation.
Input Source operations connected to node model_62/reconfiguration_unit_70/Reshape:
 model_62/reconfiguration_unit_70/MatMul_1 (defined at <ipython-input-176-0b494fa3fc75>:41)

Function call stack:
distributed_function

想法: 网络规模似乎有问题,但是我无法弄清楚该如何/如何修复...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)