为什么自定义模型中具有自定义层的偏置层形状不等于权重层形状

时间:2020-07-11 16:48:41

标签: tensorflow keras tensorflow2.0 keras-layer tf.keras

我遇到了一个自定义虚拟线性回归模型,其代码如下:

class RegressionModel(tf.keras.Model): # every new model has to use Model
    '''
    A Model that performs Linear Regression 
    '''
    def __init__(self,in_units,out_units):
        '''
        args:
            in_units: number of input neurons
            out_units: number of output units
        '''
        super(RegressionModel,self).__init__() # constructor of Parent class 
        
        self.in_units = in_units
        self.out_units = out_units
        
        self.w = tf.Variable(tf.initializers.GlorotNormal()((self.in_units,self.out_units))) 
        # make weight which has initial weights according to glorot_normal distribution
        
        self.b = tf.Variable(tf.zeros(self.out_units)) # bias is mostly zeros
            
    
    def call(self,input_tensor):
        '''
        execurte forward pass
        args:
            input_tensor: input tensor which will be fed to the network
        '''
        return tf.matmul(input_tensor, self.w) + self.b

我想问weight为什么具有in,out的2D形状,而偏斜只有out,更具体地说为什么weight是2D形状?

1 个答案:

答案 0 :(得分:0)

TLDR;

首先是矩阵乘法,而不是加法。

输入= 10个值 hidden_​​layer_1 = 7个值

w1 = [| input |,| hidden_​​layer_1 |]-> [10,7] b1 = | hidden_​​layer_1 | -> [7]

hidden_​​layer_1 =激活(输入* w1 + b1)

因此是正确的。

常规 这是一个非常基本的问题,您应该在开始实施之前先学习一下理论。

从一些基本介绍开始,这些介绍也涉及线性代数。 例如。安德鲁·伍格(Andrew Ngs)在Coursera开设的课程。 伊恩·古德洛夫斯(Ian Goodfellows)的书是免费的在线书籍,但从以下内容不包括简单的讲座 https://www.deeplearningbook.org/