Как исправить ошибку Tensorflow TypeError в библиотеке GeneticAlgs - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь использовать библиотеку 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 с обратным распространением.

Любые идеи относительно того, что может быть причиной этой ошибкиили что я могу сделать, чтобы это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...