Python 在tensorflow中实现的sigmoid函数与从头开始实现的函数有什么区别

Python 在tensorflow中实现的sigmoid函数与从头开始实现的函数有什么区别,python,python-3.x,tensorflow,neural-network,Python,Python 3.x,Tensorflow,Neural Network,数值稳定的sigmoid函数的实现与TensorFlow中的实现有什么不同 在实现这两个函数时,我得到了不同的结果sigmoid()和tf.nn.sigmoid()(或tf.sigmoid())。第一个给出了nan,准确率非常差(约0.93%),而第二个给出了非常好的准确率(约99.99%) 数值稳定的sigmoid函数,sigmoid(),由下式给出: def sigmoid(z): 返回tf.where(z>=0,1/(1+tf.exp(-z)),tf.exp(z)/(1+tf.exp(z)

数值稳定的sigmoid函数的实现与TensorFlow中的实现有什么不同

在实现这两个函数时,我得到了不同的结果
sigmoid()
tf.nn.sigmoid()
(或
tf.sigmoid()
)。第一个给出了
nan
,准确率非常差(约0.93%),而第二个给出了非常好的准确率(约99.99%)

数值稳定的sigmoid函数,
sigmoid()
,由下式给出:

def sigmoid(z):
返回tf.where(z>=0,1/(1+tf.exp(-z)),tf.exp(z)/(1+tf.exp(z)))
无论是TensorFlow实现的还是从头开始创建的
sigmoid()
,我希望两种方法都能得到相同的结果(精度)


注意:我用同一型号测试了两个函数
tf.sigmoid
sigmoid()。
l
的值是使用
tf.sigmoid
计算的
cost
l2
的值是使用自定义
sigmoid
函数计算的
cost(cost2)
,而
l
l2
的值对我来说几乎相同

如果您可以提供代码和数据(如果可以共享),我们可以对此进行更深入的研究


纳恩,你有什么意见?谢谢,@DavisHerring。
i
epochs之后的测试成本。在我的例子中,当
epoch=11
他测试
cost=NaN
时,为了准确地看到tf.nn.sigmoid方法中发生了什么,你可以打开模块并查看源代码,如果对其进行了一些额外的修改。谢谢,@ShubhamPanchal。不幸的是,我无法找到他们从头定义
sigmoid
函数的地方。docstring
y=1/(1+exp(-x))
中提到了它,但我尝试实现了这一点,但仍然没有得到预期的分数。
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import model_selection
import sys

iris_data = pd.read_csv('iris_species/Iris.csv',header=0,delimiter = ',')

data_set_y = pd.DataFrame(iris_data['Species'])
data_set_X = iris_data.drop(['Species'],axis=1)
num_samples = iris_data.shape[0]
num_features = iris_data.shape[1]
num_labels = 1

X = tf.placeholder('float',[None,4])
y = tf.placeholder('float',[None,1])

W = tf.Variable(tf.zeros([4,2]),dtype=tf.float32)
b = tf.Variable(tf.zeros([1]),dtype=tf.float32)

train_X,test_X,train_y,test_y = model_selection.train_test_split(data_set_X,data_set_y,random_state=0)

train_y = np.reshape(train_y,(-1,1))

prediction = tf.add(tf.matmul(X,W),b)
cost = tf.sigmoid(prediction)
optimizer = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
num_epochs = 1000

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(num_epochs):
        _,l = sess.run([optimizer,cost],feed_dict = {X: train_X, y: train_y})
        if epoch % 50 == 0:
            #print (type(l))
            #print (l.shape)
            print (l)


def sigmoid(z):
    return tf.where(z >= 0, 1 / (1 + tf.exp(-z)), tf.exp(z) / (1 + tf.exp(z)))

prediction = tf.add(tf.matmul(X,W),b)
cost2 = sigmoid(prediction)
optimizer2 = tf.train.GradientDescentOptimizer(0.001).minimize(cost2)
num_epochs = 1000


print ('Shape of train_y is: ',train_y.shape)


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(num_epochs):
        _,l2 = sess.run([optimizer2,cost2],feed_dict = {X: train_X, y: train_y})
        if epoch % 50 == 0:
            #print (type(l))
            #print (l.shape)
            print (l2)