我正在尝试使用keras对图像进行二值分类。
我的CNN模型对训练数据进行了良好的训练(训练准确率约为90%,验证准确率约为93%)。但在培训期间,如果我将批量大小设置为15000,则得到图I输出,如果我将批量大小设置为50000,则得到图II输出。有人能告诉我怎么了吗?预测不应该取决于批量大小,对吗?
我用于预测的代码:
y=model.predict_classes(补丁,batch_size=50000,详细=1)y=y.reshape((256,256))
我的型号:-
model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same',
input_shape=(img_channels, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# let's train the model using SGD + momentum (how original).
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
我有类似的问题,我认为这与GPU的非确定性有关——在CPU上结果是相同的,在GPU(RTX 2080Ti和RTX 3090)上结果不是。我无法解决它(使用GPU的确定性选项不起作用)。
Keras在预测功能中自动标准化输入。标准化所需的统计数据是在一个批次上计算的,这就是为什么您的输出可能取决于批次大小。您可以通过以下方式解决此问题:
更新:这是第二个解决方案的代码:
import theano
input = model.layers[0].input # Gets input Theano tensor
output = model.layers[-1].output # Gets output Theano tensor
model_theano = theano.function(input, output) # Compiling theano function
# Now model_theano is a function which behaves exactly like your classifier
predicted_score = model_theano(example) # returns predicted_score for an example argument
现在,如果您想使用这个新的NO\U模型,您应该自己标准化主数据集(例如,通过减去图像中每个像素的平均值并除以标准偏差),然后应用NO\U模型来获得整个数据集的分数(您可以在循环中迭代示例或使用numpy。沿\u轴应用\u
或numpy。沿\u轴应用\u
函数来执行此操作)。
更新2:为了使此解决方案生效,请进行更改
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
收件人:
model.add(Dense(nb_classes, activation = "softmax"))
问题内容: 我遵循了这个很棒的教程,并成功地在CloudML上训练了一个模型。我的代码还离线进行预测,但是现在我正在尝试使用Cloud ML进行预测并遇到一些问题。 为了部署我的模型,我遵循了本教程。现在,我有一个生成via的代码,并且我想对此进行预测。为此,我关注本文,我的命令如下所示: 但是我只有错误: 看起来它期望数据采用不同的格式。我在这里找到了JSON的格式规范,但找不到如何使用TFre
我在日志中收到以下警告: WARN[本机传输请求:17058]2014-07-29 13:58:33776 BatchStatement。[keyspace.tablex]的java(第223行)批准备语句的大小为10924,超过了指定的阈值5120乘以5804。 有没有办法在Spring数据卡桑德拉指定大小? Cassandra 2.0.9和spring数据Cassandra 1.0.0-REL
我最近一直在学习LMAX干扰器,并在做一些实验。令我困惑的一件事是EventHandler的onEvent处理程序方法的endOfBatch参数。考虑我的以下代码。首先,我调用的伪消息和使用者类Test1和Test1Worker: 请注意,我设置了500毫秒的延迟,以替代一些实际工作。我还在控制台中打印 然后我的驱动程序类(作为生产者)被称为DisruptrTest: 在这里,在初始化所需的内容之
问题陈述 我在带标记的文本序列上训练keras中的多对多LSTM,使用预训练的GloVe嵌入来预测序列中每个元素的标记。我的训练机制包括小批量随机梯度下降,每个小批量矩阵都在列上添加了零填充,以确保输入到网络的长度相等。 关键的是,由于任务和数据的性质对我的小批量的自定义限制,我没有使用keras嵌入层。我的目标是为我的零填充单元实现掩蔽机制,以确保损失计算不会错误地将这些单元视为真正的数据点。
有没有办法为Spring的NamedParameterJdbcTemplate对象设置批处理大小? 在我的项目中,我遇到了一些OutOfMemory问题,但我能够通过在一个较小的块循环中调用NamedParameterJdbcTemplate来解决它。但这需要一些额外的努力,比如确定块大小,将一个大列表拆分成更小的子列表等等。 我想知道NamedParameterJdbcTemplate是否有这样
如何使目标“包”依赖于目标“测试”? 这里有一个解决方案:强制sbt 0.11运行测试,但它实际上不适用于xsbt web插件。