我想在XOR问题集上测试一个简单的多层感知器。我没有拆分训练集,所以我希望获得100%的准确性,但是在经过2000个时期之后,我发现模型仍然经常会出错
这是我的第一个tf估算器,因此我认为我缺少一些简单的东西。 tensorflow文档似乎使用了一种不同的构造估算器的方法,所以我没有很多运气可以从他们那里弄清楚
from tensorflow.keras import layers
from itertools import product
import numpy as np
# Data
X = np.array(list(product([0,1], repeat=3)))
y = np.array([a ^ b ^ c for a, b, c in X])
# Define the Model
INPUT_UNITS = 3
HIDDEN_LAYER_UNITS = 5
OUTPUT_UNITS = 2
model = tf.keras.Sequential()
model.add(layers.Input(INPUT_UNITS))
model.add(layers.Dense(HIDDEN_LAYER_UNITS, tf.nn.relu))
model.add(layers.Dense(HIDDEN_LAYER_UNITS, tf.nn.relu))
model.add(layers.Dense(HIDDEN_LAYER_UNITS, tf.nn.relu))
model.add(layers.Dense(OUTPUT_UNITS, tf.nn.softmax))
# Train
N_EPOCHS = 2000
model.compile(loss='sparse_categorical_crossentropy', optimizer='Nadam', metrics=['accuracy'])
history = model.fit(x=X,
epochs=N_EPOCHS,
y=y,
verbose=0)
model.evaluate(X, y)
predicted = np.argmax(model.predict(x=X), axis=1)
print(f"Predicted: {predicted}")
print(f"Actual: {y}")
让我震惊的是,在域大小为8的情况下,2000个纪元似乎是一个非常高的数字,但是200个纪元几乎从未达到100%的准确性