Tensorflow为交叉熵输出NaN

2024-06-26 17:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd
import numpy as np
import tensorflow as tf

dataframe = pd.read_csv("data.csv")
dataframe = dataframe.drop(["id"], axis = 1)

train = dataframe[1:250]
test = dataframe[251:569]

dataY = train["diagnosis"]
for key,value in dataY.iteritems():
    if value == "M":
        dataY[key] = 1
    if value == "B":
        dataY[key] = 0
dataY = np.asarray(dataY)
dataX = np.asarray(train.drop(["diagnosis"], axis = 1))

trainRows = len(train)
trainColumns = len(dataframe.columns)-1

inputX = tf.placeholder(tf.float32, [trainRows, trainColumns])
inputY = tf.placeholder(tf.float32,  [trainRows])

W = tf.Variable(tf.zeros([trainColumns, trainRows]))
b = tf.Variable(tf.zeros([trainRows]))

Y_compare = tf.nn.softmax(tf.matmul(inputX, W)+b)

cross_entropy = -tf.reduce_sum(inputY * tf.log(Y_compare))

optimizer = tf.train.GradientDescentOptimizer(.001)
trainer = optimizer.minimize(cross_entropy)

init = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init)
for step in range(1000):
    sess.run(trainer, feed_dict={inputX: dataX, inputY: dataY})
    print(sess.run(cross_entropy, feed_dict={inputX: dataX, inputY: dataY}))
sess.close()

当我运行这段代码时,它只为每一步打印nan。我试着改变错误函数,但没起作用。我很确定问题出在错误函数或优化器上。有什么问题吗?在

这些数据是关于乳腺癌诊断的:

这是inputX:

^{pr2}$

这是输入:

[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0
 1 0 1 1 0 0 0 1 1 0 1 1 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0
 0 0 0 0 0 1 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0
 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0
 1 0 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 0 0 1 1 0 0 0
 1 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0]

Tags: keyimportdataframevaluetfasnptrain