gpt4 book ai didi

python - tensorflow 中实现的 sigmoid 函数和从头实现的有什么区别

转载 作者:行者123 更新时间:2023-11-28 17:59:47 42 4
gpt4 key购买 nike

数值稳定的 sigmoid 函数的实现与 TensorFlow 中的实现有何不同?

我在实现这两个函数 sigmoid()tf.nn.sigmoid()(或 tf.sigmoid())。第一个给出了 nan 和非常差的准确度(大约 0.93%),而第二个给出了非常好的准确度(大约 99.99%)。

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

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

我希望两种方法都能获得相同的结果(准确度),无论是通过 TensorFlow 实现的方法还是从头开始创建的方法 sigmoid()

注意:我用相同的模型测试了 tf.sigmoidsigmoid() 这两个函数。

最佳答案

我尝试使用简单的 Iris 数据集通过以下代码重现您的案例。 l 的值是使用 tf.sigmoid 计算的 costl2 的值是 cost (cost2) 使用自定义 sigmoid 函数计算,ll2 的值对我来说几乎相同。

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

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)

关于python - tensorflow 中实现的 sigmoid 函数和从头实现的有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56202698/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com