我尝试使用以下代码和简单的 Iris 数据集重现您的案例。 l 的值是使用tf.sigmoid 计算的cost,l2 的值是使用自定义sigmoid 函数计算的cost (cost2),l 和l2 的值几乎相同为了我。
如果您可以提供代码和数据(如果可以共享),我们可以对此进行更深入的研究。
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)