我有两个班,每个班有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)。我没有给出任何验证图像来验证模型以找到准确性和损失。 这种损失和准确度是否与输入图像本身有关?
简而言之,我们可以这样说:“此模型具有%的准确度,并且没有验证图像时会丢失%”?
答案 0 :(得分:1)
训练损失和准确性的计算方法不是通过与验证数据进行比较,而是通过将样本x的神经网络预测与您在培训设置。
初始化神经网络并(通常)将所有权重设置为具有特定偏差的随机值。之后,您将培训数据集的功能提供给您的网络,然后让它"猜测"结果也就是你拥有的标签(如果你像你的情况那样监督学习)。
然后你的框架将这个猜测与实际标签进行比较并计算出错误,然后通过网络反向传播,从而调整并改善所有权重。
在没有任何验证数据的情况下,这非常有效。
验证数据可让您通过让模型预测未见数据来查看模型的质量(损失,准确性等)。通过这种方式,您可以获得所谓的验证损失/准确性,并使用此信息调整超参数。
在最后一步中,您使用测试数据来评估培训的最终质量。