这不是我所期望的!
我已经在SVHN上训练了CNN。准确度接近〜0.93,总体上,当在单个数字图像上进行测试时,它的确运行良好。因此,如果我使用包含单个数字的图像测试模型,如下所示:
在预期的类别概率接近1
时效果很好。但是,如果我为模型提供诸如house
或lion
之类的随机图像,它仍然可以预测概率接近于1的类。我不明白其原因。应该预测每个类别的概率都很低。
这是我创建网络的方式。
import tensorflow.keras as keras
model = keras.Sequential()
# First Conv Layer
model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "same", input_shape=(227,227,3)))
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.MaxPooling2D(pool_size = (3,3), strides = (2,2), padding="same"))
# .. More Convolution Layer ...
# .. SOME Fully Connected Layers ..
# Final Fully Connected Layer
model.add(keras.layers.Dense(10))
model.add(keras.layers.Activation("softmax"))
model.compile(loss="categorical_crossentropy", optimizer=keras.optimizers.RMSprop(lr=0.0001), metrics=['accuracy'])
data_generator = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)
train_generator = data_generator.flow_from_directory(
'train',
target_size=(227, 227),
batch_size=batch_size,
color_mode='rgb',
class_mode='categorical'
)
model.fit_generator(
train_generator
epochs = 12,
steps_per_epoch = math.ceil(num_train_samples / batch_size),
verbose = 2
)
从我上面共享的代码中也可以看出,我使用过:
categorical_crossentropy
softmax
从0到9,共有10个班级。我还需要有一些随机图像的第11个班级吗?但这听起来很奇怪。我选择了错误的丢失/激活功能吗?
答案 0 :(得分:0)
它可以帮助您用数字图像训练网络,并包括一些随机的(房屋或狮子的)其他图像,并将它们全部标记为“非数字”。卷积神经网络不会一次查看整个图像,而是一次查看整个图像。它也可以轻松找到也类似于数字的子形状。
您的丢失和激活都很好。