簡體   English   中英

Tensorflow/Keras model 無視培訓說明?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM