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 )