我有两个类,每个类有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/13/3 [==============================] - 0s - loss: 5.3142 - acc: 0.6667
我的问题:
我想知道它是如何确定损失和准确率的,以及依据是什么?(即:loss: 5.3142 – acc: 0.6667)。我没有提供任何验证图像来验证模型以找到准确率和损失。这个损失和准确率是针对输入图像本身的吗?
简而言之,我们可以这样说吗:“这个模型在没有验证图像的情况下有%的准确率和%的损失”?
回答:
训练中的损失和准确率不是通过与验证数据进行比较来计算的,而是通过将神经网络对样本x的预测与你在训练集中提供的该样本的标签y进行比较来计算的。
你初始化你的神经网络,并(通常)将所有权重设置为具有特定偏差的随机值。之后,你将训练数据集的特征输入到你的网络中,让它“猜测”结果,即你拥有的标签(如果你像你的情况一样进行监督学习)。
然后,你的框架将这个猜测与实际标签进行比较,并计算误差,然后通过你的网络进行反向传播,从而调整和改进所有权重。
这在没有验证数据的情况下也能很好地工作。
验证数据用于通过让模型在未见过的数据上进行预测来查看模型的质量(损失、准确率等)。通过这种方式,你可以得到所谓的验证损失/准确率,并用这些信息来调整你的超参数。
在最后一步中,你使用测试数据来评估训练的最终质量。