Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 张量流权约束_Python_Tensorflow - Fatal编程技术网

Python 张量流权约束

Python 张量流权约束,python,tensorflow,Python,Tensorflow,我有一个巨大的数据集,它实际上是通过使用一个含有四个未知数的方程创建的。这意味着: A*x_1 + B*x_2 + C*x_3 + D*x_4 = y 我有x=[x_1,x_2,x_3,x_4]和y 我需要用神经网络找到A,B,C,D的值 我创建了一个(4,1)随机权重矩阵 W = tf.random_uniform((4,1), minval=0, maxval=1, dtype=tf.float64, seed=None, name=None) 现在,权重的所有元素都在0和1之间。然

我有一个巨大的数据集,它实际上是通过使用一个含有四个未知数的方程创建的。这意味着:

A*x_1 + B*x_2 + C*x_3 + D*x_4 = y  
我有
x=[x_1,x_2,x_3,x_4]
y

我需要用神经网络找到A,B,C,D的值

我创建了一个(4,1)随机权重矩阵

W = tf.random_uniform((4,1), minval=0, maxval=1, dtype=tf.float64, seed=None, name=None)
现在,权重的所有元素都在0和1之间。然而,我需要的是,将这些权重作为它们的和等于一,无论迭代是什么

例如,开始时权重可以是0.25、0.45、0.15、0.15。在1000次迭代之后,权重可以更新为0.33、0.25、0.42、0.00或1.00、0、0、0

据我所知,softmax功能适合该操作。然而,我无法将softmax函数集成为约束

第二个问题:

我试图通过修改这个模型来构建一个模型。

然而,每次的结果都不同,结果并不成立。甚至不接近。 例如:

y = 0.680084169  
x = [(0.764845252)      (0.68613559) (0.358461678) (0.680084169)] 
两种不同模型的结果具有权重

(0.63843704)    (0.12227005)    (0.42270223)    (0.05195979)  
(0.45886127)    (0.88964135)    (0.59473092)    (0.19037153)  
第一个估计值为0.759058953
第二个估计值为1.304029364


我做错了什么?

要实现
sum(X)=1的约束,您可以做两件事之一。你可以训练三次
x
s,第四次使用
1-sum(x)
。或者,在执行乘法之前,您可以将
X
除以
sum(X)
。(这与操作类似,但它是为特定目的而设计的(用于处理logit输入),并且在操作之前需要取
X
的指数。因此,如果要使用softmax进行此操作,必须首先取
X
log
,这增加了复杂性(你说你的
X
s介于0和1之间,你也会遇到0s的问题。)也就是说:

将通过缩放所有值将
X
之和设置为1。(您的问题不清楚是
X
还是
W
要设置为1,请更改上面的行以符合您的意图。)

我猜“结果不成立”你的意思是你的“人际网络”没有融合。原因有两个。首先,你可能想降低学习率

不幸的是,第二个问题是原始问题的一个理论问题。你需要4个数字的线性组合,并试图找到系数来得到一个特定的结果。问题是这个问题是欠约束的。基本上你可以任意修正4个数字中的2个,你可以找到第三个和第四个来满足t他表示相等;嗯,至少对于很多值(因为您希望
X
s介于0和1之间,所以可能有
Y
s超出了可能的范围,或者正好位于边缘)。根据您确切需要的内容,您可能需要添加L2正则化约束(也称为权重衰减),如下所示:

deviation = tf.reduce_sum( tf.square ( y - yy ) ) + 0.004 * tf.reduce_sum( tf.square( x ) )
如果0.004是重量衰减的系数,则需要通过实验找到最佳值

另外一个实施问题是

y = tf.Variable(y_train[0])
看起来您正在将
y
设置为具有的可训练变量,因此训练过程还将更改您的
y
,这可能不是您想要的。您可能想要

t = tf.Variable( y_train[ 0 ], trainable = False )
y = tf.Variable(y_train[0])
t = tf.Variable( y_train[ 0 ], trainable = False )