Tensorflow最小多层感知器具有不一致的收敛

时间:2019-07-11 16:19:32

标签: tensorflow

为什么我的会聚不一致(如何解决)?

我想在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%的准确性

0 个答案:

没有答案