introtodeeplearning icon indicating copy to clipboard operation
introtodeeplearning copied to clipboard

Lab1 Part1: TypeError: Layer.add_weight() got multiple values for argument 'shape' while running cell no. 22

Open amin2783 opened this issue 1 year ago • 2 comments

The error comes up when running locally, but not in colab.

The problematic cell is the no.22 in the solution notebook. and for reference, here's the code

### Defining a network Layer ###

# n_output_nodes: number of output nodes
# input_shape: shape of the input
# x: input to the layer

class OurDenseLayer(tf.keras.layers.Layer):
  def __init__(self, n_output_nodes):
    super(OurDenseLayer, self).__init__()
    self.n_output_nodes = n_output_nodes

  def build(self, input_shape):
    d = int(input_shape[-1])
    # Define and initialize parameters: a weight matrix W and bias b
    # Note that parameter initialization is random!
    self.W = self.add_weight("weight", shape=[d, self.n_output_nodes]) # note the dimensionality
    self.b = self.add_weight("bias", shape=[1, self.n_output_nodes]) # note the dimensionality

  def call(self, x):
    '''TODO: define the operation for z (hint: use tf.matmul)'''
    z = tf.matmul(x, self.W) + self.b # TODO
    # z = # TODO

    '''TODO: define the operation for out (hint: use tf.sigmoid)'''
    y = tf.sigmoid(z) # TODO
    # y = # TODO
    return y

# Since layer parameters are initialized randomly, we will set a random seed for reproducibility
tf.keras.utils.set_random_seed(1)
layer = OurDenseLayer(3)
layer.build((1,2))
x_input = tf.constant([[1,2.]], shape=(1,2))
y = layer.call(x_input)

# test the output!
print(y.numpy())
mdl.lab1.test_custom_dense_layer_output(y)

Output

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
[e:\Programming\Github](file:///E:/Programming/Github) Repos\MIT-Intro-to-Deep-Learning\lab1\solutions\Part1_TensorFlow_Solution.ipynb Cell 22 line 3
     [30](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=29) tf.keras.utils.set_random_seed(1)
     [31](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=30) layer = OurDenseLayer(3)
---> [32](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=31) layer.build((1,2))
     [33](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=32) x_input = tf.constant([[1,2.]], shape=(1,2))
     [34](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=33) y = layer.call(x_input)

File [c:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\layers\layer.py:223](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:223), in Layer.__new__.<locals>.build_wrapper(*args, **kwargs)
    [220](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:220) @wraps(original_build_method)
    [221](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:221) def build_wrapper(*args, **kwargs):
    [222](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:222)     with obj._open_name_scope():
--> [223](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:223)         original_build_method(*args, **kwargs)
    [224](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:224)     # Record build config.
    [225](file:///C:/Users/USER/AppData/Local/Programs/Python/Python311/Lib/site-packages/keras/src/layers/layer.py:225)     signature = inspect.signature(original_build_method)

[e:\Programming\Github](file:///E:/Programming/Github) Repos\MIT-Intro-to-Deep-Learning\lab1\solutions\Part1_TensorFlow_Solution.ipynb Cell 22 line 1
     [13](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=12) d = int(input_shape[-1])
     [14](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=13) # Define and initialize parameters: a weight matrix W and bias b
     [15](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=14) # Note that parameter initialization is random!
---> [16](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=15) self.W = self.add_weight("weight", shape=[d, self.n_output_nodes]) # note the dimensionality
     [17](vscode-notebook-cell:/e%3A/Programming/Github%20Repos/MIT-Intro-to-Deep-Learning/lab1/solutions/Part1_TensorFlow_Solution.ipynb#X30sZmlsZQ%3D%3D?line=16) self.b = self.add_weight("bias", shape=[1, self.n_output_nodes])

TypeError: Layer.add_weight() got multiple values for argument 'shape'

amin2783 avatar Jun 13 '24 16:06 amin2783

the solution is to add the name= in the add weight function:

    self.W = self.add_weight(name="weight", shape=[d, self.n_output_nodes]) # note the dimensionality
    self.b = self.add_weight(name="bias", shape=[1, self.n_output_nodes]) # note the dimensionality

intval avatar Jun 26 '24 08:06 intval

Thanks a lot. I later found out that the issue is with keras versions. I initially installed tensorflow 2.16.1, with keras3. Whereas this code is works with keras2, included with tensorflow 2.15.0 (the version used in colab).

amin2783 avatar Jun 26 '24 08:06 amin2783