caffe loss error: Check failed: The data and label should have the same first dimension
caffe loss error: Check failed: The data and label should have the same first dimension
这是我的斑点形状和图层:
-------------------------------- blob
data 4096 4.10e+03 (1, 2, 1, 2048)
Convolution1 32736 3.27e+04 (1, 16, 1, 2046)
ReLU1 32736 3.27e+04 (1, 16, 1, 2046)
Convolution2 32704 3.27e+04 (1, 16, 1, 2044)
ReLU2 32704 3.27e+04 (1, 16, 1, 2044)
...
Crop4 4224 4.22e+03 (1, 16, 1, 264)
Concat4 8448 8.45e+03 (1, 32, 1, 264)
Convolution17 4192 4.19e+03 (1, 16, 1, 262)
ReLU21 4192 4.19e+03 (1, 16, 1, 262)
Convolution18 4160 4.16e+03 (1, 16, 1, 260)
unet1 4160 4.16e+03 (1, 16, 1, 260)
ampl0 4096 4.10e+03 (1, 4096)
Reshape0 4096 4.10e+03 (1, 1, 1, 4096)
conv1 65472 6.55e+04 (1, 16, 1, 4092)
conv1_conv1_0_split_0 65472 6.55e+04 (1, 16, 1, 4092)
conv1_conv1_0_split_1 65472 6.55e+04 (1, 16, 1, 4092)
Scale1 65472 6.55e+04 (1, 16, 1, 4092)
ReLU22 65472 6.55e+04 (1, 16, 1, 4092)
Scale2 65472 6.55e+04 (1, 16, 1, 4092)
...
ReLU28 517120 5.17e+05 (1, 128, 8, 505)
Scale8 517120 5.17e+05 (1, 128, 8, 505)
ReLU29 517120 5.17e+05 (1, 128, 8, 505)
crelu4 1034240 1.03e+06 (1, 128, 16, 505)
maxPool4 518144 5.18e+05 (1, 128, 16, 253)
ampl 21 2.10e+01 (1, 21)
我在损失层得到的错误:
F0416 15:43:21.957676 95620 loss_layer.cpp:19] Check failed: bottom[0]->shape(0) == bottom[1]->shape(0) (1 vs. 10) The data and label should have the same first dimension.
注意:这个错误是我在CNN层中间加了一个全连接层(ampl0)+重塑(Reshape0)层后出现的。没有它们它工作得很好!
感谢您的帮助。
更新:那些全连接层和Reshape层是:
layer {
name: "ampl0"
type: "InnerProduct"
bottom: "unet1"
top: "ampl0"
param {
lr_mult: 1
decay_mult: 1
}
inner_product_param {
num_output: 4096
bias_term: false
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0.2
}
}
}
layer {
name: "Reshape0"
type: "Reshape"
bottom: "ampl0"
top: "Reshape0"
reshape_param {
shape {
dim: 1
dim: 1
dim: 1
dim:-1
}
}
}
您的 "Reshape"
层强制第一个维度 (batch_size
) 为 1,因此当您更改 batch_size
时,您的净中断。
为避免这种情况,您需要 "Reshape"
到 复制 第一个维度:
layer {
name: "reshape"
type: "Reshape"
bottom: "input"
top: "output"
reshape_param {
shape {
dim: 0 # copy the dimension from below <-- !!
dim: 1 # insert singleton dimension
dim: 1
dim: -1 # infer it from the other dimensions
}
}
}
我想
reshape_param { shape { dim: 1 dim: 1 } num_axes: 0 axis: 1 }
也可能会为您解决问题。
有关 "Reshape"
参数的更多信息和选项,请参阅 caffe.proto
:
// axis and num_axes control the portion of the bottom blob's shape that are
// replaced by (included in) the reshape. By default (axis == 0 and
// num_axes == -1), the entire bottom blob shape is included in the reshape,
// and hence the shape field must specify the entire output shape.
//
// axis may be non-zero to retain some portion of the beginning of the input
// shape (and may be negative to index from the end; e.g., -1 to begin the
// reshape after the last axis, including nothing in the reshape,
// -2 to include only the last axis, etc.).
//
// For example, suppose "input" is a 2D blob with shape 2 x 8.
// Then the following ReshapeLayer specifications are all equivalent,
// producing a blob "output" with shape 2 x 2 x 4:
//
// reshape_param { shape { dim: 2 dim: 2 dim: 4 } }
// reshape_param { shape { dim: 2 dim: 4 } axis: 1 }
// reshape_param { shape { dim: 2 dim: 4 } axis: -3 }
//
// num_axes specifies the extent of the reshape.
// If num_axes >= 0 (and axis >= 0), the reshape will be performed only on
// input axes in the range [axis, axis+num_axes].
// num_axes may also be -1, the default, to include all remaining axes
// (starting from axis).
//
// For example, suppose "input" is a 2D blob with shape 2 x 8.
// Then the following ReshapeLayer specifications are equivalent,
// producing a blob "output" with shape 1 x 2 x 8.
//
// reshape_param { shape { dim: 1 dim: 2 dim: 8 } }
// reshape_param { shape { dim: 1 dim: 2 } num_axes: 1 }
// reshape_param { shape { dim: 1 } num_axes: 0 }
//
// On the other hand, these would produce output blob shape 2 x 1 x 8:
//
// reshape_param { shape { dim: 2 dim: 1 dim: 8 } }
// reshape_param { shape { dim: 1 } axis: 1 num_axes: 0 }
//
这是我的斑点形状和图层:
-------------------------------- blob
data 4096 4.10e+03 (1, 2, 1, 2048)
Convolution1 32736 3.27e+04 (1, 16, 1, 2046)
ReLU1 32736 3.27e+04 (1, 16, 1, 2046)
Convolution2 32704 3.27e+04 (1, 16, 1, 2044)
ReLU2 32704 3.27e+04 (1, 16, 1, 2044)
...
Crop4 4224 4.22e+03 (1, 16, 1, 264)
Concat4 8448 8.45e+03 (1, 32, 1, 264)
Convolution17 4192 4.19e+03 (1, 16, 1, 262)
ReLU21 4192 4.19e+03 (1, 16, 1, 262)
Convolution18 4160 4.16e+03 (1, 16, 1, 260)
unet1 4160 4.16e+03 (1, 16, 1, 260)
ampl0 4096 4.10e+03 (1, 4096)
Reshape0 4096 4.10e+03 (1, 1, 1, 4096)
conv1 65472 6.55e+04 (1, 16, 1, 4092)
conv1_conv1_0_split_0 65472 6.55e+04 (1, 16, 1, 4092)
conv1_conv1_0_split_1 65472 6.55e+04 (1, 16, 1, 4092)
Scale1 65472 6.55e+04 (1, 16, 1, 4092)
ReLU22 65472 6.55e+04 (1, 16, 1, 4092)
Scale2 65472 6.55e+04 (1, 16, 1, 4092)
...
ReLU28 517120 5.17e+05 (1, 128, 8, 505)
Scale8 517120 5.17e+05 (1, 128, 8, 505)
ReLU29 517120 5.17e+05 (1, 128, 8, 505)
crelu4 1034240 1.03e+06 (1, 128, 16, 505)
maxPool4 518144 5.18e+05 (1, 128, 16, 253)
ampl 21 2.10e+01 (1, 21)
我在损失层得到的错误:
F0416 15:43:21.957676 95620 loss_layer.cpp:19] Check failed: bottom[0]->shape(0) == bottom[1]->shape(0) (1 vs. 10) The data and label should have the same first dimension.
注意:这个错误是我在CNN层中间加了一个全连接层(ampl0)+重塑(Reshape0)层后出现的。没有它们它工作得很好!
感谢您的帮助。 更新:那些全连接层和Reshape层是:
layer {
name: "ampl0"
type: "InnerProduct"
bottom: "unet1"
top: "ampl0"
param {
lr_mult: 1
decay_mult: 1
}
inner_product_param {
num_output: 4096
bias_term: false
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0.2
}
}
}
layer {
name: "Reshape0"
type: "Reshape"
bottom: "ampl0"
top: "Reshape0"
reshape_param {
shape {
dim: 1
dim: 1
dim: 1
dim:-1
}
}
}
您的 "Reshape"
层强制第一个维度 (batch_size
) 为 1,因此当您更改 batch_size
时,您的净中断。
为避免这种情况,您需要 "Reshape"
到 复制 第一个维度:
layer {
name: "reshape"
type: "Reshape"
bottom: "input"
top: "output"
reshape_param {
shape {
dim: 0 # copy the dimension from below <-- !!
dim: 1 # insert singleton dimension
dim: 1
dim: -1 # infer it from the other dimensions
}
}
}
我想
reshape_param { shape { dim: 1 dim: 1 } num_axes: 0 axis: 1 }
也可能会为您解决问题。
有关 "Reshape"
参数的更多信息和选项,请参阅 caffe.proto
:
// axis and num_axes control the portion of the bottom blob's shape that are // replaced by (included in) the reshape. By default (axis == 0 and // num_axes == -1), the entire bottom blob shape is included in the reshape, // and hence the shape field must specify the entire output shape. // // axis may be non-zero to retain some portion of the beginning of the input // shape (and may be negative to index from the end; e.g., -1 to begin the // reshape after the last axis, including nothing in the reshape, // -2 to include only the last axis, etc.). // // For example, suppose "input" is a 2D blob with shape 2 x 8. // Then the following ReshapeLayer specifications are all equivalent, // producing a blob "output" with shape 2 x 2 x 4: // // reshape_param { shape { dim: 2 dim: 2 dim: 4 } } // reshape_param { shape { dim: 2 dim: 4 } axis: 1 } // reshape_param { shape { dim: 2 dim: 4 } axis: -3 } // // num_axes specifies the extent of the reshape. // If num_axes >= 0 (and axis >= 0), the reshape will be performed only on // input axes in the range [axis, axis+num_axes]. // num_axes may also be -1, the default, to include all remaining axes // (starting from axis). // // For example, suppose "input" is a 2D blob with shape 2 x 8. // Then the following ReshapeLayer specifications are equivalent, // producing a blob "output" with shape 1 x 2 x 8. // // reshape_param { shape { dim: 1 dim: 2 dim: 8 } } // reshape_param { shape { dim: 1 dim: 2 } num_axes: 1 } // reshape_param { shape { dim: 1 } num_axes: 0 } // // On the other hand, these would produce output blob shape 2 x 1 x 8: // // reshape_param { shape { dim: 2 dim: 1 dim: 8 } } // reshape_param { shape { dim: 1 } axis: 1 num_axes: 0 } //