【问题标题】:Tensorflow/Keras model disregarding training instructions?Tensorflow/Keras 模型无视训练说明?
【发布时间】:2020-09-01 22:28:25
【问题描述】:

编辑:经过更多分析,我发现 tf 最近切换到列出批次而不是样本,这解释了为什么我看到的是 30 而不是 15000。我仍然不知道为什么测试的准确度如此之低。

我刚开始接触 Tensorflow 的神经网络,并认为我会使用 imdb Keras 数据集制作一个简单的情绪预测模型。

我的问题是,网络并没有按照应有的方式在每个 epoch 上训练 10000 个示例,而是在每个 epoch 上只训练 30 个示例。这导致测试数据的准确性比随机准确性差。将批量大小更改为 1 可将示例计数修复为正确的 10000,但网络的准确度仍低于 50%。我根本不明白为什么会这样。

这是我的代码:

import tensorflow as td
from tensorflow import keras
import numpy as np

data = keras.datasets.imdb

(train_data, train_labels), (test_data, test_labels) = data.load_data(num_words=10000)

word_index = data.get_word_index()

word_index = {k:(v+3) for k, v, in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2
word_index["<UNUSED>"] = 3

reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])

train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding ="post", maxlen=250)
test_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding ="post", maxlen=250)


# === MODEL ===

model = keras.Sequential()
model.add(keras.layers.Embedding(10000, 16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))

model.summary()

model.compile(optimizer="adam", loss='binary_crossentropy', metrics=["accuracy"])

x_val = train_data[:10000]
x_train = train_data[10000:]

y_val = train_labels[:10000]
y_train = train_labels[10000:]

fitModel = model.fit(x_train, y_train, epochs=28, batch_size=512, validation_data=(x_val, y_val), verbose=1)

results = model.evaluate(test_data, test_labels)

print(results)

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    您的 X_train 数据只有一行。

    下面两行必须改:

    x_train = train_data[10000:]
    
    y_train = train_labels[10000:]
    

    此外,您应该将验证数据更改为模型未经过训练的数据。

    【讨论】:

    • 感谢您的回答,但我有点不清楚您的意思。我以为训练数据应该只有一行,分批输入 512。我应该把它改成什么? train_data 和 train_labels 是 25000 个长列表,所以我认为对第一个和最后 10000 个进行采样不会导致任何重叠。
    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2020-01-03
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多