我正在尝试使用tf_unet网络构建U-net,但是在加载数据时遇到问题:我的训练集的形状为:
trainX.shape
(80, 32, 128, 2)
和我的标签,是使用MultiLabelBinarizer()热编码的,其形状为
trainY.shape
(80, 6)
代码期望数据的形状为数据的[图像数量,nx,ny,通道数]和[一帧编码的图像形状[nx,ny,类数]]。我不确定如何重塑标签以使其适合所需的输入。我的标签如下:
trainY
array([[1, 1, 1, 0, 1, 0],
[0, 1, 1, 0, 0, 1],
[0, 1, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[1, 1, 1, 0, 0, 0],
数据看起来像这样:
trainX
array([[[[ 5.22126081e-01, -5.55787108e-01],
[ 5.23363288e-01, -5.55895832e-01],
[ 5.22337312e-01, -5.56328280e-01],
...,
[ 5.22050769e-01, -5.56036279e-01],
[ 5.22345243e-01, -5.56362269e-01],
[ 5.22309731e-01, -5.56512230e-01]],
[[ 1.10787671e+01, -1.06332381e+00],
[ 1.10703070e+01, -1.06241261e+00],
[ 1.10776785e+01, -1.06328681e+00],
...
总共有6个标签,有些样本可以包含更多标签,因此它们看起来像这样。
现在拥有U-net:
from tf_unet.image_util import SimpleDataProvider
data_provider = SimpleDataProvider(trainX, trainY)
net = unet.Unet(channels=2,
n_class=6,
layers=3,
features_root=64,
cost_kwargs=dict(regularizer=0.001),
)
path="prediction1"
trainer = unet.Trainer(net, optimizer="momentum", opt_kwargs=dict(momentum=0.2))
path = trainer.train(data_provider, path,
training_iters=20,
epochs=1,
dropout=0.5,
display_step=2)
当我运行它时,出现以下错误:
cannot reshape array of size 6 into shape (1,32,128,6)
我知道我应该重塑标签,但我不确定如何做到这一点。任何帮助,将不胜感激!预先谢谢!
[如果您实际上正在进行语义分割,则您的trainY
不应具有(80, 6)
的形状,而应具有与trainX
(80, 32, 128, 1)
稀疏和(80, 32, 128, 6)
相同的高度和宽度)编码。
编辑
换句话说,模型期望输入的每个像素为label
,但是您正在为输入的所有像素传递one标签。