title: Initial weights in Network with Keras / Tensorflow
body: <p>I am trying to get the initial weights for a given network.</p>
  <p>This thread suggests that one needs to specify the input dimension: <a href="https://stackoverflow.com/questions/46798708/how-to-view-initialized-weights-i-e-before-training">How to view initialized weights (i.e. before training)?</a></p>
  <p>This thread suggests that after compilation weights should be available: <a href="https://stackoverflow.com/questions/40496069/reset-weights-in-keras-layer">Reset weights in Keras layer</a></p>
  <blockquote>
  <p>Save the initial weights right after compiling the model but before training it.</p>
  </blockquote>
  <p>While I reproduced the results in the first post I am unable to apply it to my case:</p>
  <pre><code>import numpy as np
  from keras.models import Sequential
  from keras.layers import Dense
  import tensorflow as tf
  
  # Reproducing https://stackoverflow.com/questions/46798708/how-to-view-initialized-weights-i-e-before-training
  
  # First model without input_dim prints an empty list
  model = Sequential()
  model.add(Dense(5, weights=[np.ones((3, 5)), np.zeros(5)],
                  activation='relu'))
  print(model.get_weights())
  
  # Second model with input_dim prints the assigned weights
  model1 = Sequential()
  model1.add(Dense(5, weights=[np.ones((3, 5)), np.zeros(5)],
                   input_dim=3,
                   activation='relu'))
  model1.add(Dense(1, activation='sigmoid'))
  
  print(model1.get_weights())
  
  
  class Test(tf.keras.Model):
      def __init__(self, n_inputs: int, neurons=10):
          super(Test, self).__init__(name=&quot;Test&quot;)
          self.neurons = neurons
  
          # Initilializers
          mean, std = 0., 0.0005
          bias_normalization = None
          kernel_initializer = tf.keras.initializers.RandomNormal(mean=mean,
                                                                  stddev=std)
          self.h1 = Dense(n_inputs, activation=&quot;linear&quot;, name=&quot;h1&quot;,
                          kernel_initializer=kernel_initializer,
                          bias_initializer=bias_normalization,
                          input_dim=n_inputs)
  
      def call(self, inputs):
          x = self.h1(inputs)
          return x
  
  
  # Model Test
  
  test = Test(n_inputs=1, neurons=100)
  test.get_weights()  # empty, expected
  
  test.compile()
  test.get_weights()  # empty, unexpected
  </code></pre>