如何在Keras的自定义批次训练中获得每个epoch的损失?

3

我正在进行AI方面的一些实验,我有一个模型,希望能训练具有之前选择和不规则形状的批次数据。

以下是我的情况:

model = create_model(units_vector, (inp_shape,), lr)
for i in range(epochs):
    for batch in batches:
        model.fit(batch[0], batch[1], epochs=1, verbose=0)

函数create_model定义了一个简单的模型(仅包含密集层),并使用mseAdam进行编译。

batches是一个包含输入输出的元组列表(存储在numpy数组中)。

我希望在每个epoch结束时打印模型经历的损失,或者有一种方法可以检查模型是否正在学习东西(而不必在每个批次打印一条消息,这会导致太多的垃圾信息)。

1个回答

1
这里有一种简单的方法,在每个时期结束时打印损失。你可以通过model.history.history访问损失。您还可以根据需要修改消息。
epochs = 5
n_batches = 20
n_features = 10
batches = [[np.random.uniform(0,1, (1,n_features)), np.random.uniform(0,1, (1,1))] for _ in range(n_batches)]

inp = Input((n_features,))
x = Dense(32)(inp)
out = Dense(1)(x)
model = Model(inp, out)
model.compile('adam', 'mse')

for i in range(epochs):
    for batch in batches:
        model.fit(batch[0], batch[1], epochs=1, verbose=0)
    print(f"EPOCH {i}", model.history.history)

输出示例:

EPOCH 0 {'loss': [0.9013449549674988]}
EPOCH 1 {'loss': [0.7315107583999634]}
EPOCH 2 {'loss': [0.5937882661819458]}
EPOCH 3 {'loss': [0.5331881046295166]}
EPOCH 4 {'loss': [0.47262871265411377]}

1
谢谢,这正是我想要的。 - Daniel Casasampera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接