0

我正在尝试使用像 f=(x-a1)^2+(y-a2)^2+a3 这样的 numpy 创建函数

其中 a1,a2,a3 是随机生成的数字,x,y 是参数。

但我无法使用它,我想找到 f(0,0) 其中 [0,0] 是 [x,y] 和 [a1,a2,a3] 之前设置,但我的代码不起作用。然后我想将此函数转换为张量流张量。这是我的代码,带有“##”的字符串不起作用。

import tensorflow as tf
from random import random, seed
import numpy as np


def mypolyval(x, min_point, min_value):
    res = min_value
    for i in range(len(min_point)):
        res += (x[i] - min_point[i]) ** 2
    return res


class FunGen:
    def __init__(self, dim, n):
        self.dim = dim
        self.n = n
        self.functions = []
        self.x = []

    def c2(self):
        seed(10)
        for _ in range(self.n):
            min_point = [random() for _ in range(self.dim)]
            min_value = random()
            f = np.vectorize(mypolyval, excluded=['x'])

            ##print(f(x=np.array([0, 0]), min_point=min_point, min_value=min_value))
            self.functions.append((f, min_point, min_value))
        return self.functions


functions = FunGen(2, 1).c2()
for i in functions:
    print(type(i[0]))
    f=i[0]
   ## print(f(x=[0, 0], min_value=i[1], min_point=i[2]))
    ##a=tf.convert_to_tensor(f,dtype=np.float32)
4

2 回答 2

0

该问题与张量流无关。线

min_point = [random() for _ in range(self.dim)]

创建一个列表并且列表没有该.size()属性。

您可以使用 将它变成一个 numpy 数组min_point = np.array([random() for _ in range(self.dim)])),然后.size()就可以了。

或者如果你想坚持使用列表for i in range(len(min_point)),它会计算列表的长度。

您还需要将它们添加min_pointmin_value排除列表中:

from random import random, seed
import numpy as np


def mypolyval(x, min_point, min_value):

    print('x', x)
    print('min_point', min_point)
    print('min_value', min_value)
    res = min_value
    for i in range(len(min_point)):
        res += (x[i] - min_point[i]) ** 2
    return res


class FunGen:
    def __init__(self, dim, n):
        self.dim = dim
        self.n = n
        self.functions = []
        self.x = []

    def c2(self):
        seed(10)
        for _ in range(self.n):
            min_point = [random() for _ in range(self.dim)]
            min_value = random()
            f = np.vectorize(mypolyval, excluded=['x', 'min_point', 'min_value'])
            #print(f(x=[0, 0], min_value=min_value, min_point=min_point))
            self.functions.append((f, min_point, min_value))
        return self.functions


functions = FunGen(2, 1).c2()
for i in functions:
    print(type(i[0]))
    print(i)
    f=i[0]
    print(f(x=[0, 0], min_value=i[2], min_point=i[1]))
于 2018-02-11T19:21:10.197 回答
0

要从 numpy 函数创建 TensorFlow 函数,您应该使用tf.py_func

包装一个 python 函数并将其用作 TensorFlow 操作。

来自 TensorFlow API

def my_func(x):
  # x will be a numpy array with the contents of the placeholder below
  return np.sinh(x)
inp = tf.placeholder(tf.float32)
y = tf.py_func(my_func, [inp], tf.float32)
于 2018-02-11T19:12:57.693 回答