我提出了一个tf.keras模型无法从非常简单的数据中学习的示例。我正在使用tensorflow-gpu==2.0.0和keras==2.3.0Python 3.7。在文章的最后,我给出了 Python 代码来重现我观察到的问题。
数据
样本是形状为 (6, 16, 16, 16, 3) 的 Numpy 数组。为了使事情变得非常简单,我只考虑充满 1 和 0 的数组。带有 1 的数组被赋予标签 1,带有 0 的数组被赋予标签 0。我可以使用以下n_samples = 240代码生成一些样本(在下面,):
def generate_fake_data():
for j in range(1, 240 + 1):
if j < 120:
yield np.ones((6, 16, 16, 16, 3)), np.array([0., 1.])
else:
yield np.zeros((6, 16, 16, 16, 3)), np.array([1., 0.])
为了在模型中输入这些数据,我使用下面的代码tf.keras创建了一个实例。tf.data.Dataset这将基本上创建洗牌批次的BATCH_SIZE = 12样本。
def make_tfdataset(for_training=True):
dataset = tf.data.Dataset.from_generator(generator=lambda: generate_fake_data(),
output_types=(tf.float32,
tf.float32),
output_shapes=(tf.TensorShape([6, 16, 16, 16, 3]),
tf.TensorShape([2])))
dataset = dataset.repeat()
if for_training:
dataset = dataset.shuffle(buffer_size=1000)
dataset = dataset.batch(BATCH_SIZE)
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)
return dataset
问题!
在 500 个 epoch 中,模型损失保持在 0.69 左右,并且从未低于 0.69。如果我将学习率设置为1e-2而不是1e-3. 数据非常简单(只有 0 和 1)。天真地,我希望该模型具有比仅 0.6 更好的精度。事实上,我希望它能够迅速达到 100% 的准确率。我做错了什么?
拉丁的传说
小怪兽爱吃肉
相关分类