Я пытаюсь использовать библиотеку GeneticAlgs для оптимизации весов нейронной сети.Однако при вызове метода init_random_population
для объекта RealGA
выдается ошибка Tensorflow TypeError.
Мой код выглядит следующим образом:
rga = RealGA(fitness, optim='min', selection='rank', mut_type=2, cross_type=2)
rga.init_random_population(size=4, dim=29249, interval=(-1.0,1.0))
И определенная мной фитнес-функция выглядит следующим образом:
def fitness(x):
"""
Computes the performance of the given individual
Params:
x: the individual, a vector of random weights to be split amongst the
networks matrices
Returns:
a float representing the loss of the individual, smaller is better
"""
# set weights for lstm 1
model.layers[0].set_weights( [x[0:128].reshape(1,128),
x[128:4224].reshape(32,128),
x[4224:4352].reshape(128,)] )
# set weights for lstm 2
model.layers[4].set_weights( [x[4352:12544].reshape(32,256),
x[12544:28928].reshape(64,256),
x[28928:29184].reshape(256,)] )
# set weights and bias for output dense layer
model.layers[6].set_weights( [x[29184:29248].reshape(64,1),
x[29248:29249].reshape(1) ])
pred_y = model.predict(train_x)
return mean_squared_error(train_y,pred_y)
Переменные model
, train_x
и train_y
являются глобальными в приведенном выше коде.
Я получаю следующую ошибку:
Traceback (most recent call last):
File "/.../anaconda3/envs/awesome/lib/python3.6/site-packages/geneticalgs/real_ga.py", line 346, in init_random_population
self._sort_population()
File "/.../anaconda3/envs/awesome/lib/python3.6/site-packages/geneticalgs/standard_ga.py", line 386, in _sort_population
self.population.sort(key=lambda x: x.fitness_val, reverse=True)
File "/.../anaconda3/envs/awesome/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 671, in __bool__
raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed. "
TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.
Я подумал, что этот вопрос должен быть более сфокусирован на библиотеке GeneticAlgs.Для библиотеки еще не существует тега, и у меня недостаточно высокой репутации, чтобы добавить его.Я не думаю, что это имеет значение, поэтому я не включил его в качестве тега (но буду редактировать, если это имеет значение), но я использую Keras для создания своей сети.
По сути, я вручную устанавливаювеса каждого слоя в моей сети и использование генетического алгоритма для определения оптимальных весов, в отличие от использования традиционной функции Keras fit
с обратным распространением.
Любые идеи относительно того, что может быть причиной этой ошибкиили что я могу сделать, чтобы это исправить?