什么代表了Keras培训结果的损失或准确性

时间:2017-07-15 10:25:24

标签: machine-learning tensorflow keras

我有两个班,每个班有3张图片。我在Keras尝试了这段代码。

trainingDataGenerator = ImageDataGenerator()

trainGenerator = trainingDataGenerator.flow_from_directory(
                        trainingDataDir,
                        target_size=(28, 28),
                        batch_size = 1,
                        seed=7,
                        class_mode='binary',
                        )

FilterSize = (3,3)
inputShape = (imageWidth, imageHeight,3)

model = Sequential()
model.add (Conv2D(32, FilterSize, input_shape= inputShape))
model.add (Activation('relu'))
model.add ( MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
                optimizer = 'rmsprop',
                metrics=['accuracy'])


model.fit_generator(
        trainGenerator,
        steps_per_epoch=3,
        epochs=epochs)

我的输出:

当我训练这个模型时,我得到了这个输出:

Using TensorFlow backend.
Found 2 images belonging to 2 classes.
Epoch 1/1
3/3 [==============================] - 0s - loss: 5.3142 - acc: 0.6667 

我的问题:

我想知道它如何决定损失和准确性以及基于什么? (即:损失:5.3142 - acc:0.6667)。我没有给出任何验证图像来验证模型以找到准确性和损失。 这种损失和准确度是否与输入图像本身有关?

简而言之,我们可以这样说:“此模型具有%的准确度,并且没有验证图像时会丢失%”?

1 个答案:

答案 0 :(得分:1)

训练损失和准确性的计算方法不是通过与验证数据进行比较,而是通过将样本x的神经网络预测与您在培训设置。

初始化神经网络并(通常)将所有权重设置为具有特定偏差的随机值。之后,您将培训数据集的功能提供给您的网络,然后让它"猜测"结果也就是你拥有的标签(如果你像你的情况那样监督学习)。

然后你的框架将这个猜测与实际标签进行比较并计算出错误,然后通过网络反向传播,从而调整并改善所有权重。

在没有任何验证数据的情况下,这非常有效。

验证数据可让您通过让模型预测未见数据来查看模型的质量(损失,准确性等)。通过这种方式,您可以获得所谓的验证损失/准确性,并使用此信息调整超参数。

在最后一步中,您使用测试数据来评估培训的最终质量。