我使用keras生物医学图像分割来分割脑神经元。我使用model.evaluate()
它给了我Dice coef:0.916
,然而,当我使用model.predict然后通过计算Dice coef来循环预测图像时,Dice coef是0.82
。
有什么想法吗?
由于
答案 0 :(得分:7)
关于正则化。 <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.datatables.net/v/dt/dt-1.10.16/r-2.2.1/datatables.min.css">
<script src="https://cdn.datatables.net/v/dt/dt-1.10.16/r-2.2.1/datatables.min.js"></script>
<script>
$(document).ready(function() {
var table = $('#example').DataTable({
'responsive': true
});
// Handle click on "Expand All" button
$('#btn-show-all-children').on('click', function() {
// Expand row details
table.rows(':not(.parent)').nodes().to$().find('td:first-child').trigger('click');
});
// Handle click on "Collapse All" button
$('#btn-hide-all-children').on('click', function() {
// Collapse row details
table.rows('.parent').nodes().to$().find('td:first-child').trigger('click');
});
});
</script>
</head>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th class="none">Age</th>
<th class="none">Start date</th>
<th class="none">Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
</tbody>
</table>
</html>
返回模型的最终输出,即答案。 model.predict()
返回损失。损失用于训练模型(通过反向传播),但这并不是答案。
此video of ML Tokyo应该有助于理解model.evaluate()
和model.evaluate()
之间的区别。
答案 1 :(得分:4)
问题在于Keras
中的每个指标都以下列方式评估:
batch
评估指标值。k
批次之后等于计算k
批次中指标的平均值)。大多数最受欢迎的指标(例如mse
,categorical_crossentropy
,mae
)等 - 作为每个示例的损失值的平均值 - 都具有此类评估结束的属性结果合适。但是在Dice Coefficient的情况下 - 它在所有批次中的值的平均值不等于在整个数据集上计算的实际值,并且model.evaluate()
使用这种计算方式 - 这是您的问题的直接原因。
答案 2 :(得分:0)
keras.evaluate()
函数将为您提供每批的损失值。对于所有批次,keras.predict()
函数将为批量中的所有样本提供实际预测。因此,即使您使用相同的数据,也会存在差异,因为损失函数的值几乎总是与预测值不同。这是两件不同的事情。
答案 3 :(得分:0)
model.evaluate
函数预测给定输入的输出,然后基于model.compile
和y_true
计算在y_pred
中指定的指标函数,并返回计算的指标值作为输出。
model.predict
仅返回y_pred
因此,如果您使用model.predict
然后自己计算指标,则计算出的指标值应与model.evaluate
相同
例如,在评估基于RNN / LSTM的模型时,应该使用model.predict
而不是model.evaluate
,在该模型中,下一步需要将输出作为输入馈入