Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 tf.sigmoid()用于较大值时溢出_Python_Matlab_Tensorflow_Logistic Regression_Sigmoid - Fatal编程技术网

Python tf.sigmoid()用于较大值时溢出

Python tf.sigmoid()用于较大值时溢出,python,matlab,tensorflow,logistic-regression,sigmoid,Python,Matlab,Tensorflow,Logistic Regression,Sigmoid,我一直在尝试使用我在Matlab中学习的tensorflow(Andrew ng在Coursera上的ML课程)在python中创建一个单变量逻辑回归模型。模型收敛,但仅当初始θ0和θ1变量定义为小(约1.00)时,但如果初始值设置为100.00,则将收敛值返回为nan。 当学习率提高时,同样的事情也会发生。 python代码是 import tensorflow as tf import numpy as np import os import matplotlib.pyplot as plt

我一直在尝试使用我在Matlab中学习的tensorflow(Andrew ng在Coursera上的ML课程)在python中创建一个单变量逻辑回归模型。模型收敛,但仅当初始θ0和θ1变量定义为小(约1.00)时,但如果初始值设置为100.00,则将收敛值返回为nan。 当学习率提高时,同样的事情也会发生。 python代码是

import tensorflow as tf
import numpy as np
import os
import matplotlib.pyplot as plt


os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
epoch = 100000


x_data = (np.random.rand(100)*100).astype(np.float64)
y_data = np.vectorize(lambda y: 0.00 if y < 50.00 else 1.00)(x_data)

theta0 = tf.Variable(1, dtype=tf.float64)
theta1 = tf.Variable(-1, dtype=tf.float64)

hypothesis = theta0 + (theta1 * x_data)
hypothesis = tf.sigmoid(hypothesis)

term1 = -(y_data * tf.log(hypothesis))
term2 = -((1-y_data) * tf.log(1-hypothesis))

loss = tf.reduce_mean(term1 + term2)

optimizer = tf.train.GradientDescentOptimizer(0.006).minimize(loss)
init_var = tf.global_variables_initializer()

train_data = []
with tf.Session() as sess:
    sess.run(init_var)
    for i in range(epoch):
        train_data.append(sess.run([optimizer, theta0, theta1, loss])[1:])
        if i%100==0:
            print("Epoch ", i, ":", sess.run([theta0, theta1, loss]))
将tensorflow导入为tf
将numpy作为np导入
导入操作系统
将matplotlib.pyplot作为plt导入
操作系统环境['TF\u CPP\u MIN\u LOG\u LEVEL']=“2”
历元=100000
x_数据=(np.random.rand(100)*100).aType(np.float64)
y_数据=np.矢量化(如果y<50.00,则λy:0.00,否则为1.00)(x_数据)
theta0=tf.Variable(1,dtype=tf.float64)
theta1=tf.Variable(-1,dtype=tf.float64)
假设=θ0+(θ1*x_数据)
假设=tf.乙状结肠(假设)
term1=-(y_数据*tf.log(假设))
term2=-((1-y_数据)*tf.log(1-hypothesis))
损失=tf.减少平均值(term1+term2)
优化器=tf.train.GradientDescentOptimizer(0.006).最小化(损失)
init_var=tf.global_variables_initializer()
列车_数据=[]
使用tf.Session()作为sess:
sess.run(初始化变量)
对于范围内的i(历元):
列车数据追加(sess.run([optimizer,theta0,theta1,loss])[1:]
如果i%100==0:
打印(“Epoch”,i,:”,sess.run([theta0,theta1,loss]))

对于所描述的代码和更正行为的解释,甚至是用于上述目的的更好的代码,我们将不胜感激。

您应该使用
tf.nn.sigmoid\u cross\u entropy\u with\u logits
而不是使用sigmoid然后进行日志计算损失。sigmoid_cross_entropy_with_logits具有一些内部逻辑,有助于防止数值下溢/溢出。

梯度下降优化方法对步长和潜在初始值非常敏感。我不太清楚你到底在用什么,但可能会尝试更小的步长。@William是的,我尝试过使用较小的学习速率值。它确实有效,但不是最好的,但θ的初始值仍然会把一切搞糟。顺便问一下,你能给我推荐其他的优化方法吗?我不太确定问题出在哪里。对于θ的某些值,你会得到非常错误的预测。如果这些值错误到产生巨大错误,就会使模型崩溃。这就是为什么最好从θ(1或0)的较低值开始。如果您已经规范化了模型,那么您的模型就不会那么错误,所以您的错误应该是可控的。