Использование `tf.Tensor` в качестве Python` bool` запрещено.Используйте `если t не None:` вместо `if t:`, чтобы проверить, определен ли тензор, - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь определить func (x), чтобы использовать здесь библиотеку генетических водорослей: https://github.com/bobirdmi/genetic-algorithms/tree/master/examples Однако, когда я пытаюсь использовать sga.init_random_population(population_size, params, interval), код жалуется на меня, используя tf.Tensors в качестве python bools,

Тем не менее, я ссылаюсь только на один bool во всем коде (Elitism), поэтому я понятия не имею, почему эта ошибка даже отображается.Спросил у других, кто использовал sga.init _... и мой ввод / настройка в порядке.Буду признателен за любые предложения.

Полный возврат:

Traceback (most recent call last):
  File "C:\Users\Eric\eclipse-workspace\hw1\ga2.py", line 74, in <module>
    sga.init_random_population(population_size, params, interval)
  File "C:\Program Files\Python36\lib\site-packages\geneticalgs\real_ga.py", line 346, in init_random_population
    self._sort_population()
  File "C:\Program Files\Python36\lib\site-packages\geneticalgs\standard_ga.py", line 386, in _sort_population
    self.population.sort(key=lambda x: x.fitness_val, reverse=True)
  File "C:\Program Files\Python36\lib\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.

код

import hw1
#import matplotlib
from geneticalgs import BinaryGA, RealGA, DiffusionGA, MigrationGA
#import numpy as np
#import csv
#import time
#import pickle
#import math
#import matplotlib.pyplot as plt
from keras.optimizers import Adam
from hw1 import x_train, y_train, x_test, y_test
from keras.losses import mean_squared_error
#import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Dropout
# GA standard settings
generation_num = 50
population_size = 16
elitism = True
selection = 'rank'
tournament_size = None # in case of tournament selection
mut_type = 1
mut_prob = 0.05
cross_type = 1
cross_prob = 0.95
optim = 'min' # minimize or maximize a fitness value? May be 'min' or 'max'.
interval = (-1, 1)
# Migration GA settings
period = 5
migrant_num = 3
cloning = True

def func(x):
    #dimensions of weights and biases
    #layer0weights = [10][23]
    #layer0biases = [10]
    #layer1weights = [10][20]
    #layer1biases = [20]
    #layer2weights = [1][20]
    #layer2biases = [1]
    #split up x for weights and biases
    lay0 = x[0:230]
    bias0 = x[230:240]
    lay1 = x[240:440]
    bias1 = x[440:460]
    lay2 = x[460:480]
    bias2 = x[480:481]
    #fit to the shape of the actual model
    lay0 = lay0.reshape(23,10)
    bias0 = bias0.reshape(10,)
    lay1 = lay1.reshape(10,20)
    bias1 = bias1.reshape(20,)
    lay2 = lay2.reshape(20,1)
    bias2 = bias2.reshape(1,)
    #set the newly shaped object to layers
    hw1.model.layers[0].set_weights([lay0, bias0])
    hw1.model.layers[1].set_weights([lay1, bias1])
    hw1.model.layers[2].set_weights([lay2, bias2])

    res = hw1.model.predict(x_train)
    error = mean_squared_error(res,y_train)
    return error

ga_model = Sequential()
ga_model.add(Dense(10, input_dim=23, activation='relu'))
ga_model.add(Dense(20, activation='relu'))
ga_model.add(Dense(1, activation='sigmoid'))

sga = RealGA(func, optim=optim, elitism=elitism, selection=selection,
        mut_type=mut_type, mut_prob=mut_prob, 
        cross_type=cross_type, cross_prob=cross_prob)
params = 481

sga.init_random_population(population_size, params, interval)

optimal = sga.best_solution[0]

predict = func(optimal)
print(predict)

1 Ответ

0 голосов
/ 12 февраля 2019

Tensorflow генерирует вычислительный график операций, которые должны быть выполнены в сеансе Tensorflow.

geneticalgs.RealGA.init_random_population - это операция, которая использует numpy.random.uniform для генерации массива-пустышки. 1

Сгенерированная совокупность, являющаяся объектом Tensor, может означать, что:

  • numpy.random.uniform, вызванное в geneticalgs.RealGA.init_random_population, было оформлено вreturn Tensors
  • numpy.random.uniform был добавлен в граф вычислений для выполнения в сеансе.

Я попытаюсь выполнить программу с нетерпением, включив активное выполнение. 2

tf.enable_execution()

Вы также можете исполнить те части, которые вам небезразличны.

size = tf.placeholder(tf.int64)
dim = tf.placeholder(tf.int64)
interval = tf.placeholder(tf.int64, shape=(2,))

init_random_population = tf.py_func(
    sga.init_random_population, [size, dim, interval], [])

with tf.Session() as session:
    session.run(
        init_random_population,
        {size: population_size, dim: params, interval: interval})
...