add noise exploration
This commit is contained in:
parent
11cfe5afc1
commit
f716ade292
|
@ -32,14 +32,15 @@ class NeuralNet(object):
|
||||||
learning_rate=0.01,
|
learning_rate=0.01,
|
||||||
debug=False,
|
debug=False,
|
||||||
debug_interval=100,
|
debug_interval=100,
|
||||||
batch_size=2,
|
batch_size=1,
|
||||||
explore_iters=500,
|
explore_iters=500,
|
||||||
noise_scale_begin=0.5,
|
noise_scale_begin=0.1,
|
||||||
noise_scale_end=0.01):
|
noise_scale_end=0):
|
||||||
# absolute path for the model weitghs file
|
# absolute path for the model weitghs file
|
||||||
# one model for each (project, session)
|
# one model for each (project, session)
|
||||||
self.weights_file = weights_file
|
self.weights_file = weights_file
|
||||||
|
|
||||||
|
self.history = None
|
||||||
self.recommend_iters = 0
|
self.recommend_iters = 0
|
||||||
self.n_input = n_input
|
self.n_input = n_input
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
|
@ -73,7 +74,7 @@ class NeuralNet(object):
|
||||||
self.model.load_weights(self.weights_file)
|
self.model.load_weights(self.weights_file)
|
||||||
if self.debug:
|
if self.debug:
|
||||||
LOG.info('Neural Network Model weights file exists, load weights from the file')
|
LOG.info('Neural Network Model weights file exists, load weights from the file')
|
||||||
except:
|
except Exception: # pylint: disable=broad-except
|
||||||
LOG.info('Weights file does not match neural network model, train model from scratch')
|
LOG.info('Weights file does not match neural network model, train model from scratch')
|
||||||
|
|
||||||
# Build same neural network as self.model, But input X is variables,
|
# Build same neural network as self.model, But input X is variables,
|
||||||
|
@ -111,20 +112,22 @@ class NeuralNet(object):
|
||||||
# save model weights
|
# save model weights
|
||||||
self.save_weights()
|
self.save_weights()
|
||||||
if self.debug:
|
if self.debug:
|
||||||
MSEs = self.history.history['mean_squared_error']
|
mse = self.history.history['mean_squared_error']
|
||||||
i = 0
|
i = 0
|
||||||
size = len(MSEs)
|
size = len(mse)
|
||||||
while(i < size):
|
while(i < size):
|
||||||
LOG.info("Neural network training phase, epoch %d: mean_squared_error %f",
|
LOG.info("Neural network training phase, epoch %d: mean_squared_error %f",
|
||||||
i, MSEs[i])
|
i, mse[i])
|
||||||
i += self.debug_interval
|
i += self.debug_interval
|
||||||
LOG.info("Neural network training phase, epoch %d: mean_squared_error %f",
|
LOG.info("Neural network training phase, epoch %d: mean_squared_error %f",
|
||||||
size - 1, MSEs[size - 1])
|
size - 1, mse[size - 1])
|
||||||
|
|
||||||
def predict(self, X_pred):
|
def predict(self, X_pred):
|
||||||
return self.model.predict(X_pred)
|
return self.model.predict(X_pred)
|
||||||
|
|
||||||
def add_noise(self, weights, scale=1):
|
# Reference: Parameter Space Noise for Exploration.ICLR 2018, https://arxiv.org/abs/1706.01905
|
||||||
|
def add_noise(self, weights):
|
||||||
|
scale = self.adaptive_noise_scale()
|
||||||
size = weights.shape[-1]
|
size = weights.shape[-1]
|
||||||
noise = scale * np.random.normal(size=size)
|
noise = scale * np.random.normal(size=size)
|
||||||
return weights + noise
|
return weights + noise
|
||||||
|
@ -144,6 +147,14 @@ class NeuralNet(object):
|
||||||
w2, b2 = self.model.get_layer(index=2).get_weights()
|
w2, b2 = self.model.get_layer(index=2).get_weights()
|
||||||
w3, b3 = self.model.get_layer(index=3).get_weights()
|
w3, b3 = self.model.get_layer(index=3).get_weights()
|
||||||
|
|
||||||
|
if explore is True:
|
||||||
|
w1 = self.add_noise(w1)
|
||||||
|
b1 = self.add_noise(b1)
|
||||||
|
w2 = self.add_noise(w2)
|
||||||
|
b2 = self.add_noise(b2)
|
||||||
|
w3 = self.add_noise(w3)
|
||||||
|
b3 = self.add_noise(b3)
|
||||||
|
|
||||||
if self.debug:
|
if self.debug:
|
||||||
y_predict = self.predict(X_start)
|
y_predict = self.predict(X_start)
|
||||||
LOG.info("Recommend phase, y prediction: min %f, max %f, mean %f",
|
LOG.info("Recommend phase, y prediction: min %f, max %f, mean %f",
|
||||||
|
|
|
@ -546,10 +546,15 @@ def configuration_recommendation(target_data):
|
||||||
|
|
||||||
# neural network model
|
# neural network model
|
||||||
# FIXME: choose algorithm based on the session option
|
# FIXME: choose algorithm based on the session option
|
||||||
model_nn = NeuralNet(weights_file=full_path, n_input=X_samples.shape[1],
|
model_nn = NeuralNet(weights_file=full_path,
|
||||||
batch_size=X_samples.shape[0], debug=True)
|
n_input=X_samples.shape[1],
|
||||||
|
batch_size=X_samples.shape[0],
|
||||||
|
explore_iters=500,
|
||||||
|
noise_scale_begin=0.1,
|
||||||
|
noise_scale_end=0,
|
||||||
|
debug=True)
|
||||||
model_nn.fit(X_scaled, y_scaled)
|
model_nn.fit(X_scaled, y_scaled)
|
||||||
res = model_nn.recommend(X_samples, X_min, X_max, explore=False)
|
res = model_nn.recommend(X_samples, X_min, X_max, explore=True)
|
||||||
|
|
||||||
model = GPRGD(length_scale=DEFAULT_LENGTH_SCALE,
|
model = GPRGD(length_scale=DEFAULT_LENGTH_SCALE,
|
||||||
magnitude=DEFAULT_MAGNITUDE,
|
magnitude=DEFAULT_MAGNITUDE,
|
||||||
|
|
Loading…
Reference in New Issue