Merge branch 'master' of gitlab.lrz.de:mobile-ifi/bannana-networks
This commit is contained in:
@@ -674,8 +674,6 @@ if __name__ == '__main__':
|
|||||||
run_exp(net)
|
run_exp(net)
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
# this does not work as the aggregation function screws over the fixpoint computation....
|
|
||||||
# TODO: check for fixpoint in aggregated space...
|
|
||||||
with FixpointExperiment() as exp:
|
with FixpointExperiment() as exp:
|
||||||
run_count = 1000
|
run_count = 1000
|
||||||
net = TrainingNeuralNetworkDecorator(AggregatingNeuralNetwork(4, width=2, depth=2)).with_params(epsilon=0.1e-6)
|
net = TrainingNeuralNetworkDecorator(AggregatingNeuralNetwork(4, width=2, depth=2)).with_params(epsilon=0.1e-6)
|
||||||
|
55
code/setups/fixpoint-density.py
Normal file
55
code/setups/fixpoint-density.py
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path += ['../', './']
|
||||||
|
|
||||||
|
from util import *
|
||||||
|
from experiment import *
|
||||||
|
from network import *
|
||||||
|
|
||||||
|
def generate_counters():
|
||||||
|
return {'divergent': 0, 'fix_zero': 0, 'fix_other': 0, 'fix_sec': 0, 'other': 0}
|
||||||
|
|
||||||
|
def count(counters, net, notable_nets=[]):
|
||||||
|
if net.is_diverged():
|
||||||
|
counters['divergent'] += 1
|
||||||
|
elif net.is_fixpoint():
|
||||||
|
if net.is_zero():
|
||||||
|
counters['fix_zero'] += 1
|
||||||
|
else:
|
||||||
|
counters['fix_other'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
elif net.is_fixpoint(2):
|
||||||
|
counters['fix_sec'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
else:
|
||||||
|
counters['other'] += 1
|
||||||
|
return counters, notable_nets
|
||||||
|
|
||||||
|
with Experiment('fixpoint-density') as exp:
|
||||||
|
exp.trials = 1000
|
||||||
|
exp.epsilon = 1e-4
|
||||||
|
net_generators = []
|
||||||
|
for activation in ['linear', 'sigmoid', 'relu']:
|
||||||
|
net_generators += [lambda activation=activation: WeightwiseNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=False)]
|
||||||
|
net_generators += [lambda activation=activation: AggregatingNeuralNetwork(aggregates=4, width=2, depth=2).with_keras_params(activation=activation, use_bias=False)]
|
||||||
|
net_generators += [lambda activation=activation: RecurrentNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=False)]
|
||||||
|
all_counters = []
|
||||||
|
all_notable_nets = []
|
||||||
|
all_names = []
|
||||||
|
for net_generator_id, net_generator in enumerate(net_generators):
|
||||||
|
counters = generate_counters()
|
||||||
|
notable_nets = []
|
||||||
|
for _ in tqdm(range(exp.trials)):
|
||||||
|
net = net_generator().with_params(epsilon=exp.epsilon)
|
||||||
|
name = str(net.__class__.__name__) + " activiation='" + str(net.get_keras_params().get('activation')) + "' use_bias='" + str(net.get_keras_params().get('use_bias')) + "'"
|
||||||
|
count(counters, net, notable_nets)
|
||||||
|
all_counters += [counters]
|
||||||
|
all_notable_nets += [notable_nets]
|
||||||
|
all_names += [name]
|
||||||
|
exp.save(all_counters=all_counters)
|
||||||
|
exp.save(all_notable_nets=all_notable_nets)
|
||||||
|
exp.save(all_names=all_names)
|
||||||
|
for exp_id, counter in enumerate(all_counters):
|
||||||
|
exp.log(all_names[exp_id])
|
||||||
|
exp.log(all_counters[exp_id])
|
||||||
|
exp.log('\n')
|
76
code/setups/known-fixpoint-variation.py
Normal file
76
code/setups/known-fixpoint-variation.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path += ['../', './']
|
||||||
|
|
||||||
|
from util import *
|
||||||
|
from experiment import *
|
||||||
|
from network import *
|
||||||
|
from soup import prng
|
||||||
|
|
||||||
|
from statistics import mean
|
||||||
|
avg = mean
|
||||||
|
|
||||||
|
def generate_fixpoint_weights():
|
||||||
|
return [
|
||||||
|
np.array([[1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], dtype=np.float32),
|
||||||
|
np.array([[1.0, 0.0], [0.0, 0.0]], dtype=np.float32),
|
||||||
|
np.array([[1.0], [0.0]], dtype=np.float32)
|
||||||
|
]
|
||||||
|
|
||||||
|
def generate_fixpoint_net():
|
||||||
|
net = WeightwiseNeuralNetwork(width=2, depth=2).with_keras_params(activation='sigmoid')
|
||||||
|
net.set_weights(generate_fixpoint_weights())
|
||||||
|
return net
|
||||||
|
|
||||||
|
def vary(old_weights, e=1.0):
|
||||||
|
new_weights = copy.deepcopy(old_weights)
|
||||||
|
for layer_id, layer in enumerate(new_weights):
|
||||||
|
for cell_id, cell in enumerate(layer):
|
||||||
|
for weight_id, weight in enumerate(cell):
|
||||||
|
if prng() < 0.5:
|
||||||
|
new_weights[layer_id][cell_id][weight_id] = weight + prng() * e
|
||||||
|
else:
|
||||||
|
new_weights[layer_id][cell_id][weight_id] = weight - prng() * e
|
||||||
|
return new_weights
|
||||||
|
|
||||||
|
with Experiment('known-fixpoint-variation') as exp:
|
||||||
|
exp.depth = 10
|
||||||
|
exp.trials = 100
|
||||||
|
exp.max_steps = 100
|
||||||
|
exp.epsilon = 1e-4
|
||||||
|
exp.xs = []
|
||||||
|
exp.ys = []
|
||||||
|
exp.zs = []
|
||||||
|
exp.notable_nets = []
|
||||||
|
current_scale = 1.0
|
||||||
|
for _ in range(exp.depth):
|
||||||
|
print('variation scale ' + str(current_scale))
|
||||||
|
for _ in tqdm(range(exp.trials)):
|
||||||
|
net = generate_fixpoint_net().with_params(epsilon=exp.epsilon)
|
||||||
|
net.set_weights(vary(net.get_weights(), current_scale))
|
||||||
|
time_to_something = 0
|
||||||
|
time_as_fixpoint = 0
|
||||||
|
still_fixpoint = True
|
||||||
|
for _ in range(exp.max_steps):
|
||||||
|
net.self_attack()
|
||||||
|
if net.is_zero() or net.is_diverged():
|
||||||
|
break
|
||||||
|
if net.is_fixpoint():
|
||||||
|
if still_fixpoint:
|
||||||
|
time_as_fixpoint += 1
|
||||||
|
else:
|
||||||
|
print('remarkable')
|
||||||
|
exp.notable_nets += [net.get_weights()]
|
||||||
|
still_fixpoint = True
|
||||||
|
else:
|
||||||
|
still_fixpoint = False
|
||||||
|
time_to_something += 1
|
||||||
|
exp.xs += [current_scale]
|
||||||
|
exp.ys += [time_to_something]
|
||||||
|
exp.zs += [time_as_fixpoint]
|
||||||
|
current_scale /= 10.0
|
||||||
|
for d in range(exp.depth):
|
||||||
|
exp.log('variation 10e-' + str(d))
|
||||||
|
exp.log('avg time to vergence ' + str(avg(exp.ys[d*exp.trials:(d+1)*exp.trials])))
|
||||||
|
exp.log('avg time as fixpoint ' + str(avg(exp.zs[d*exp.trials:(d+1)*exp.trials])))
|
||||||
|
|
72
code/setups/mixed-self-fixpoints.py
Normal file
72
code/setups/mixed-self-fixpoints.py
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path += ['../', './']
|
||||||
|
|
||||||
|
from util import *
|
||||||
|
from experiment import *
|
||||||
|
from network import *
|
||||||
|
|
||||||
|
import keras.backend
|
||||||
|
|
||||||
|
|
||||||
|
def generate_counters():
|
||||||
|
return {'divergent': 0, 'fix_zero': 0, 'fix_other': 0, 'fix_sec': 0, 'other': 0}
|
||||||
|
|
||||||
|
def count(counters, net, notable_nets=[]):
|
||||||
|
if net.is_diverged():
|
||||||
|
counters['divergent'] += 1
|
||||||
|
elif net.is_fixpoint():
|
||||||
|
if net.is_zero():
|
||||||
|
counters['fix_zero'] += 1
|
||||||
|
else:
|
||||||
|
counters['fix_other'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
elif net.is_fixpoint(2):
|
||||||
|
counters['fix_sec'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
else:
|
||||||
|
counters['other'] += 1
|
||||||
|
return counters, notable_nets
|
||||||
|
|
||||||
|
with Experiment('training_fixpoint') as exp:
|
||||||
|
exp.trials = 20
|
||||||
|
exp.selfattacks = 4
|
||||||
|
exp.trains_per_selfattack_values = [100 * i for i in range(11)]
|
||||||
|
exp.epsilon = 1e-4
|
||||||
|
net_generators = []
|
||||||
|
for activation in ['linear', 'sigmoid', 'relu']:
|
||||||
|
for use_bias in [False]:
|
||||||
|
net_generators += [lambda activation=activation, use_bias=use_bias: WeightwiseNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
# net_generators += [lambda activation=activation, use_bias=use_bias: AggregatingNeuralNetwork(aggregates=4, width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
# net_generators += [lambda activation=activation, use_bias=use_bias: RecurrentNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
|
||||||
|
all_names = []
|
||||||
|
all_data = []
|
||||||
|
for net_generator_id, net_generator in enumerate(net_generators):
|
||||||
|
xs = []
|
||||||
|
ys = []
|
||||||
|
for trains_per_selfattack in exp.trains_per_selfattack_values:
|
||||||
|
counters = generate_counters()
|
||||||
|
notable_nets = []
|
||||||
|
for _ in tqdm(range(exp.trials)):
|
||||||
|
net = TrainingNeuralNetworkDecorator(net_generator()).with_params(epsilon=exp.epsilon)
|
||||||
|
name = str(net.net.__class__.__name__) + " activiation='" + str(net.get_keras_params().get('activation')) + "' use_bias=" + str(net.get_keras_params().get('use_bias'))
|
||||||
|
for selfattack_id in range(exp.selfattacks):
|
||||||
|
net.self_attack()
|
||||||
|
for train_id in range(trains_per_selfattack):
|
||||||
|
loss = net.compiled().train(epoch=selfattack_id*trains_per_selfattack+train_id)
|
||||||
|
if net.is_diverged() or net.is_fixpoint():
|
||||||
|
break
|
||||||
|
count(counters, net, notable_nets)
|
||||||
|
keras.backend.clear_session()
|
||||||
|
xs += [trains_per_selfattack]
|
||||||
|
ys += [float(counters['fix_zero'] + counters['fix_other']) / float(exp.trials)]
|
||||||
|
all_names += [name]
|
||||||
|
all_data += [{'xs':xs, 'ys':ys}]
|
||||||
|
|
||||||
|
exp.save(all_names=all_names)
|
||||||
|
exp.save(all_data=all_data)
|
||||||
|
for exp_id, name in enumerate(all_names):
|
||||||
|
exp.log(all_names[exp_id])
|
||||||
|
exp.log(all_data[exp_id])
|
||||||
|
exp.log('\n')
|
59
code/setups/training-fixpoints.py
Normal file
59
code/setups/training-fixpoints.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path += ['../', './']
|
||||||
|
|
||||||
|
from util import *
|
||||||
|
from experiment import *
|
||||||
|
from network import *
|
||||||
|
|
||||||
|
def generate_counters():
|
||||||
|
return {'divergent': 0, 'fix_zero': 0, 'fix_other': 0, 'fix_sec': 0, 'other': 0}
|
||||||
|
|
||||||
|
def count(counters, net, notable_nets=[]):
|
||||||
|
if net.is_diverged():
|
||||||
|
counters['divergent'] += 1
|
||||||
|
elif net.is_fixpoint():
|
||||||
|
if net.is_zero():
|
||||||
|
counters['fix_zero'] += 1
|
||||||
|
else:
|
||||||
|
counters['fix_other'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
elif net.is_fixpoint(2):
|
||||||
|
counters['fix_sec'] += 1
|
||||||
|
notable_nets += [net]
|
||||||
|
else:
|
||||||
|
counters['other'] += 1
|
||||||
|
return counters, notable_nets
|
||||||
|
|
||||||
|
with Experiment('training_fixpoint') as exp:
|
||||||
|
exp.trials = 5
|
||||||
|
exp.run_count = 500
|
||||||
|
exp.epsilon = 1e-4
|
||||||
|
net_generators = []
|
||||||
|
for activation in ['linear', 'sigmoid', 'relu']:
|
||||||
|
for use_bias in [False]:
|
||||||
|
net_generators += [lambda activation=activation, use_bias=use_bias: WeightwiseNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
net_generators += [lambda activation=activation, use_bias=use_bias: AggregatingNeuralNetwork(aggregates=4, width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
net_generators += [lambda activation=activation, use_bias=use_bias: RecurrentNeuralNetwork(width=2, depth=2).with_keras_params(activation=activation, use_bias=use_bias)]
|
||||||
|
all_counters = []
|
||||||
|
all_notable_nets = []
|
||||||
|
all_names = []
|
||||||
|
for net_generator_id, net_generator in enumerate(net_generators):
|
||||||
|
counters = generate_counters()
|
||||||
|
notable_nets = []
|
||||||
|
for _ in tqdm(range(exp.trials)):
|
||||||
|
net = TrainingNeuralNetworkDecorator(net_generator()).with_params(epsilon=exp.epsilon)
|
||||||
|
name = str(net.net.__class__.__name__) + " activiation='" + str(net.get_keras_params().get('activation')) + "' use_bias=" + str(net.get_keras_params().get('use_bias'))
|
||||||
|
for run_id in range(exp.run_count):
|
||||||
|
loss = net.compiled().train(epoch=run_id+1)
|
||||||
|
count(counters, net, notable_nets)
|
||||||
|
all_counters += [counters]
|
||||||
|
all_notable_nets += [notable_nets]
|
||||||
|
all_names += [name]
|
||||||
|
exp.save(all_counters=all_counters)
|
||||||
|
exp.save(all_notable_nets=all_notable_nets)
|
||||||
|
exp.save(all_names=all_names)
|
||||||
|
for exp_id, counter in enumerate(all_counters):
|
||||||
|
exp.log(all_names[exp_id])
|
||||||
|
exp.log(all_counters[exp_id])
|
||||||
|
exp.log('\n')
|
Reference in New Issue
Block a user