Boris Reif
Boris Reif

Reputation: 143

How to get rid of the "UserWarning: The initializer GlorotUniform is unseeded" message?

I have the following code from: Bias-Variance Decomposition for Model Assessment

import matplotlib.pyplot as plt
import numpy as np

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

from mlxtend.evaluate import bias_variance_decomp
from mlxtend.data import boston_housing_data

from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import BaggingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

np.random.seed(16)
tf.random.set_seed(16)

X, y = boston_housing_data()
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                test_size=0.3,
                                                random_state=123,
                                                shuffle=True)

model = Sequential()
model.add(Dense(2048, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='linear'))

optimizer = tf.keras.optimizers.Adam()
model.compile(loss='mean_squared_error', optimizer=optimizer)
model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=0)
mean_squared_error(model.predict(X_test), y_test)

avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
    model, X_train, y_train, X_test, y_test, 
    loss='mse',
    num_rounds=100,
    random_seed=16,
    epochs=100,
    batch_size=32,
    verbose=0)

print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

The Code works. However, it produces an annoying warning:

UserWarning: The initializer GlorotUniform is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initalizer instance more than once. warnings.warn(

What changes need to be made to the code in order to get rid of the warning?

Upvotes: 2

Views: 4126

Answers (1)

Boris Reif
Boris Reif

Reputation: 143

As the warning message says, a seed needs to be provided to the initializer. Simply change the code to:

import matplotlib.pyplot as plt
import numpy as np

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

from mlxtend.evaluate import bias_variance_decomp
from mlxtend.data import boston_housing_data

from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import BaggingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

from keras import initializers

np.random.seed(16)
tf.random.set_seed(16)

X, y = boston_housing_data()
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                test_size=0.3,
                                                random_state=123,
                                                shuffle=True)

model = Sequential()
model.add(Dense(2048, activation='relu', 
kernel_initializer=initializers.glorot_uniform(seed=0)))
model.add(Dense(512, activation='relu', 
kernel_initializer=initializers.glorot_uniform(seed=0)))
model.add(Dense(32, activation='relu', 
kernel_initializer=initializers.glorot_uniform(seed=0)))
model.add(Dense(1, activation='linear', 
kernel_initializer=initializers.glorot_uniform(seed=0)))

optimizer = tf.keras.optimizers.Adam()
model.compile(loss='mean_squared_error', optimizer=optimizer)
model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=0)
mean_squared_error(model.predict(X_test), y_test)

avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
    model, X_train, y_train, X_test, y_test, 
    loss='mse',
    num_rounds=10,
    random_seed=16,
    epochs=10,
    batch_size=32,
    verbose=0)

print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

Upvotes: 1

Related Questions