为什么在Tensorflow Nan中丢失我的简单NN?

莫里茨

我创建了这个简单的NN。但是,每次迭代中的损失始终是“零”。我以前使用过这种算法,并且一直都能正常工作。

这是除相应输入外的代码:

import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.metrics import accuracy_score
import sys

#load test and train sets
xtrain = pd.read_csv(r'xtrain.csv', decimal=',').astype('float32')
ytrain = pd.read_csv(r'ytrain.csv', decimal=',').astype('float32')
xtest = pd.read_csv(r'xtest.csv', decimal=',').astype('float32')
ytest = pd.read_csv(r'ytest.csv', decimal=',').astype('float32')

# Convert from pandas data frame
xtrain = xtrain.values
ytrain = ytrain.values

n_inputs = 43
n_hidden1 = 300
n_hidden2 = 200
n_outputs = 5

learning_rate = 0.001
training_epochs = 2

batch_size = 100
display_step = 1

X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")
y = tf.placeholder(tf.int64, shape=(None, n_outputs), name="y")
training = tf.placeholder_with_default(False, shape=(), name='training')

with tf.name_scope("dnn"):
    he_init = tf.contrib.layers.variance_scaling_initializer()
    hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, kernel_initializer=he_init, name="hidden1")
    hidden2 = tf.layers.dense(hidden1, n_hidden2, name="hidden2", activation=tf.nn.relu)
    logits = tf.layers.dense(hidden2, n_outputs, name="outputs")

# Reduce loss
with tf.name_scope("loss"):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))


# Define optimizer
with tf.name_scope("train"):
    optimizer = tf.train.AdamOptimizer(learning_rate)
    training_op = optimizer.minimize(loss)

with tf.name_scope("eval"):
    correct_prediction = tf.equal(tf.argmax(logits, 1),tf.argmax(y, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))


init = tf.global_variables_initializer()
saver = tf.train.Saver()
avg_set = []
epoch_set = []

accuracy_summary = tf.summary.scalar('accuracy', accuracy)
cost_summary = tf.summary.scalar('loss', loss)

with tf.Session() as sess:
    sess.run(init)

    for epoch in range (training_epochs):
        avg_cost = 0.

        sess.run(training_op, feed_dict={X: xtrain, y: ytrain})

        avg_cost += sess.run(loss, feed_dict={X: xtrain, y: ytrain})
        acc_train = accuracy.eval(feed_dict={X: xtrain, y: ytrain})
        acc_test = accuracy.eval(feed_dict={X: xtest, y: ytest})

        if epoch % display_step == 0:
            print("Epoch: ", '%04d' % (epoch + 1), "loss = ", "{:.9f}".format(avg_cost), "accuracy-train = ",
                  "{:.9f}".format(acc_train), "accuracy-test = ", "{:.9f}".format(acc_test))
            avg_set.append(avg_cost)
            epoch_set.append(epoch + 1)
    print("Training phase finished")

    save_path = saver.save(sess, "./my_model_final.ckpt")

运行代码时,我得到以下结果:

 Epoch:  0001 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0002 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0003 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0004 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0005 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0006 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918
Epoch:  0007 loss =  nan accuracy-train =  0.073428266 accuracy-test =  0.071483918

有人知道为什么损失总是微不足道吗?我已经尝试找出错误的年龄,并且真的感谢您的帮助。

亚伦

我注意到了一些可疑的东西。为什么是y类型tf.int64而不是tf.float32使用softmax_cross_entropy_with_logits标签时,概率分布总计为1.0如果标签改为正确类的索引,则应使用sparse_softmax_cross_entropy_with_logits

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的 TensorFlow NN 模型的预测值有上限?

为什么在tensorflow的tf.nn.dropout中缩放输入?

为什么Tensorflow输出这些简单的结果?

为什么这个简单的模型在tensorflow中占用大量内存?

为什么我的回调没有在 Tensorflow 中调用?

为什么我们在Tensorflow中命名变量?

为什么我是 NaN

为什么tensorflow不允许我写文件?

为什么我们需要TensorFlow tf.Graph?

Tensorflow:为什么tf.case给我错误的结果?

Tensorflow:为什么我的代码运行越来越慢?

为什么我需要“ as_default()”在Tensorflow图中编写指令?

为什么在安装conda之后Tensorflow无法识别我的GPU?

为什么我不能通过 conda 更新 tensorflow 1.7.0

为什么我不能在 Windows 7 上使用 Tensorflow?

在 ML 中使用 tensorflow,为什么我的内核不断重启?

为什么修剪中的参数会在Tensorflow的tfmot中增加

为什么占位符不能在 tensorflow 中工作?

为什么您必须重塑Keras / Tensorflow 2中的输入?

为什么在tensorflow(python)中调用encode_cvs之后为什么没有()?

为什么这个简单的Tensorflow代码不成功?(使用Tensorflow的ConvnetJS)

为什么在Ubuntu 19.10中安装tensorflow-gpu后tensorflow无法正常工作?

为什么我的数据在拆分功能中丢失?

为什么我的C#DLL中的方法丢失了?

为什么我从子目录中丢失模板?

为什么在安装过程中需要为Tensorflow创建一个conda环境?为什么我们不能通过pip安装Tensorflow?

为什么结果显示b'hello,Python!' ,什么时候我使用tensorflow?

为什么我们需要Tensorflow的损失函数中的MNIST标签使用`int64`?

为什么我的Tensorflow中的逻辑回归分类器无法学习?