为什么我的Tensorflow Keras模型在训练时会输出奇怪的损失和准确性值?

弗雷德里克·布拉默

我已经使用python在Tensorflow中训练了一个自定义文本分类器,用于使用以下代码将句子分类为包含信息的问题/句子:

import tensorflow as tf
from tensorflow import keras


from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

text = ""
with open("/content/train_new.txt") as source:
  for line in source.readlines():
    text = text + line

print("text: " + text)

sentences = []
labels = []

for item in text.split("<n>"):
  parts = item.split("<t>")
  print(parts)
  sentences.append(parts[0])
  labels.append(parts[1])

print(sentences)
print(labels)

print("----")

train_test_split_percentage = 80

training_size = round((len(sentences)/100)*train_test_split_percentage)

print("training size: " + str(training_size) + " of " + str(len(labels)))

training_sentences = sentences[0:training_size]
testing_sentences = sentences[training_size:]

training_labels = labels[0:training_size]
testing_labels = labels[training_size:]

vocab_size = 100
max_length = 10

tokenizer = Tokenizer(num_words = vocab_size, oov_token="<OOV>")
tokenizer.fit_on_texts(sentences)

word_index = tokenizer.word_index

training_sequences = tokenizer.texts_to_sequences(training_sentences)
training_padded = pad_sequences(training_sequences, maxlen=max_length, padding="post", truncating="post")

testing_sequences = tokenizer.texts_to_sequences(testing_sentences)
testing_padded = pad_sequences(testing_sequences, maxlen=max_length, padding="post", truncating="post")

# convert training & testing data into numpy array
# Need this block to get it to work with TensorFlow 2.x
import numpy as np
training_padded = np.array(training_padded)
training_labels = np.asarray(training_labels).astype('float32').reshape((-1,1))
testing_padded = np.array(testing_padded)
testing_labels = np.asarray(testing_labels).astype('float32').reshape((-1,1))

# defining the model
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, 24, input_length=max_length),
    tf.keras.layers.GlobalAveragePooling1D(),
    tf.keras.layers.Dense(24, activation='relu'),
    tf.keras.layers.Dense(1, activation='softmax')
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

# training the model
num_epochs = 1000
history = model.fit(training_padded, training_labels, epochs=num_epochs, validation_data=(testing_padded, testing_labels), verbose=2)

但是,在训练时,它会打印出奇怪的准确性和损失值,如下所示:

Epoch 972/1000
9/9 - 0s - loss: -8.2316e+03 - accuracy: 0.7345 - val_loss: -2.7299e+04 - val_accuracy: 0.0000e+00
Epoch 973/1000
9/9 - 0s - loss: -8.2452e+03 - accuracy: 0.7345 - val_loss: -2.7351e+04 - val_accuracy: 0.0000e+00
Epoch 974/1000
9/9 - 0s - loss: -8.2571e+03 - accuracy: 0.7345 - val_loss: -2.7363e+04 - val_accuracy: 0.0000e+00
Epoch 975/1000
9/9 - 0s - loss: -8.2703e+03 - accuracy: 0.7345 - val_loss: -2.7416e+04 - val_accuracy: 0.0000e+00

train_new.txt文件包含以下形式的数据: text<t>class_num<n>

尝试使用model.predict()功能进行预测时,它总是输出[[1.]]

我的代码有什么问题?

Frightera
tf.keras.layers.Dense(1, activation='sigmoid')

如果要进行二进制分类,则应使用sigmoid作为激活。但是,

tf.keras.layers.Dense(2, activation='softmax') 

就概率而言将是正确的。

Softmax输出的总和将始终等于1。这就是为什么每次输出1的原因。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么代表了 Keras 中训练结果的损失或准确性

来自分类Dev

为什么我的损失和准确性图有些不稳定?

来自分类Dev

什么是训练准确性和训练损失?为什么我们需要计算它们?

来自分类Dev

当我训练我的Caffe模型时,损失总是保持很大的值,并且准确性并没有提高。

来自分类Dev

Tensorflow没有记录验证损失和验证准确性

来自分类Dev

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

来自分类Dev

在训练阶段,我的CNN验证准确性和损失函数的行为怪异

来自分类Dev

是什么导致训练准确性大幅度提高以及各个时期之间的损失?

来自分类Dev

仅当验证准确性提高时,如何才能保存/覆盖我的TensorFlow / Keras模型?

来自分类Dev

为什么训练准确性没有提高?

来自分类Dev

为什么在Keras LSTM培训中有3项损失却有2项准确性?

来自分类Dev

为什么使用tensorflow2.0的同一数据集的训练准确性和验证准确性会有所不同?

来自分类Dev

如何提高模型损失和准确性?

来自分类Dev

Tensorflow二进制分类训练的损失不会减少,准确性会保持在50%左右

来自分类Dev

为什么尽管损失衰减并且评估结果合理,但张量流的``准确性''值始终为0

来自分类Dev

Keras / Tensoflow训练期间报告的“准确性”是什么意思?

来自分类Dev

为什么改组训练数据会影响我的随机森林分类器的准确性?

来自分类Dev

为什么我的Keras / TensorFlow模型拒绝拟合(即使参数似乎正确)?

来自分类Dev

为什么在使用tf.keras(Tensorflow 2.0)进行分类器训练时BinaryCrossentropy作为损失和指标不相同?

来自分类Dev

验证损失和准确性提高

来自分类Dev

TensorFlow:为什么我的 Keras 回调监视器值不可用?

来自分类Dev

在tensorflow / keras中,为什么在使用predict_on_batch训练后重新计算train_on_batch的输出损失不同?

来自分类Dev

为什么我的TensorFlow Convnet(尝试)训练会产生NaN梯度?

来自分类Dev

为什么Tensorflow / Keras Flatten层不能使我的阵列变平?

来自分类Dev

为什么即使我设置种子变量,TensorFlow也会产生不同的输出?

来自分类Dev

为什么在 tensorflow 代码中没有改变训练模型的准确率?

来自分类Dev

Tensorflow模型的准确性和熊猫数据丢失

来自分类Dev

Tensorflow模型的准确性和熊猫数据丢失

来自分类Dev

为什么将官方Keras mnist示例的非常简单的移植到tensorflow 2.x会导致准确性大幅下降?

Related 相关文章

  1. 1

    什么代表了 Keras 中训练结果的损失或准确性

  2. 2

    为什么我的损失和准确性图有些不稳定?

  3. 3

    什么是训练准确性和训练损失?为什么我们需要计算它们?

  4. 4

    当我训练我的Caffe模型时,损失总是保持很大的值,并且准确性并没有提高。

  5. 5

    Tensorflow没有记录验证损失和验证准确性

  6. 6

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

  7. 7

    在训练阶段,我的CNN验证准确性和损失函数的行为怪异

  8. 8

    是什么导致训练准确性大幅度提高以及各个时期之间的损失?

  9. 9

    仅当验证准确性提高时,如何才能保存/覆盖我的TensorFlow / Keras模型?

  10. 10

    为什么训练准确性没有提高?

  11. 11

    为什么在Keras LSTM培训中有3项损失却有2项准确性?

  12. 12

    为什么使用tensorflow2.0的同一数据集的训练准确性和验证准确性会有所不同?

  13. 13

    如何提高模型损失和准确性?

  14. 14

    Tensorflow二进制分类训练的损失不会减少,准确性会保持在50%左右

  15. 15

    为什么尽管损失衰减并且评估结果合理,但张量流的``准确性''值始终为0

  16. 16

    Keras / Tensoflow训练期间报告的“准确性”是什么意思?

  17. 17

    为什么改组训练数据会影响我的随机森林分类器的准确性?

  18. 18

    为什么我的Keras / TensorFlow模型拒绝拟合(即使参数似乎正确)?

  19. 19

    为什么在使用tf.keras(Tensorflow 2.0)进行分类器训练时BinaryCrossentropy作为损失和指标不相同?

  20. 20

    验证损失和准确性提高

  21. 21

    TensorFlow:为什么我的 Keras 回调监视器值不可用?

  22. 22

    在tensorflow / keras中,为什么在使用predict_on_batch训练后重新计算train_on_batch的输出损失不同?

  23. 23

    为什么我的TensorFlow Convnet(尝试)训练会产生NaN梯度?

  24. 24

    为什么Tensorflow / Keras Flatten层不能使我的阵列变平?

  25. 25

    为什么即使我设置种子变量,TensorFlow也会产生不同的输出?

  26. 26

    为什么在 tensorflow 代码中没有改变训练模型的准确率?

  27. 27

    Tensorflow模型的准确性和熊猫数据丢失

  28. 28

    Tensorflow模型的准确性和熊猫数据丢失

  29. 29

    为什么将官方Keras mnist示例的非常简单的移植到tensorflow 2.x会导致准确性大幅下降?

热门标签

归档