[英]Tensorflow/Keras model disregarding training instructions?
编辑:经过更多分析,我发现 tf 最近切换到列出批次而不是样本,这解释了为什么我看到 30 而不是 15000。我仍然不知道为什么测试的准确性如此低。
我刚开始接触 Tensorflow 的 neural.networks,我想我会使用 imdb Keras 数据集做一个简单的情绪预测 model。
我的问题是 .network 没有像它应该的那样在 10000 个示例上训练每个 epoch,而是仅在 30 个示例上训练每个 epoch。 这导致测试数据的准确性比随机准确性差。 将批量大小更改为 1 可将示例计数固定为正确的 10000,但 .network 的准确度仍低于 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)
您的 X_train 数据只有一行。
必须更改以下两行:
x_train = train_data[10000:]
y_train = train_labels[10000:]
此外,您应该将验证数据更改为 model 未受过训练的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.