如何预测keras中的2d输出(标签形状=20,42,3)



我有一个手部姿势估计数据集(RHD数据集(。输入是RGB图像(320x320x3(,单个标签具有以下形状(42,3(:

array([[ 0.05283 ,  0.05878 ,  0.6696  ],
[-0.05483 ,  0.08679 ,  0.5844  ],
[-0.03584 ,  0.08737 ,  0.6015  ],
[-0.01452 ,  0.08199 ,  0.6239  ],
[ 0.02035 ,  0.07135 ,  0.6479  ],
[-0.01679 ,  0.07526 ,  0.5043  ],
[-0.00701 ,  0.06789 ,  0.5283  ],
[ 0.002691,  0.06231 ,  0.5502  ],
[ 0.01555 ,  0.06194 ,  0.5836  ],
[ 0.02368 ,  0.06908 ,  0.4946  ],
[ 0.02951 ,  0.06739 ,  0.52    ],
[ 0.03332 ,  0.05871 ,  0.5455  ],
[ 0.0389  ,  0.05864 ,  0.5797  ],
[ 0.05521 ,  0.07793 ,  0.5055  ],
[ 0.05739 ,  0.07229 ,  0.5305  ],
[ 0.05845 ,  0.06505 ,  0.5556  ],
[ 0.05725 ,  0.06129 ,  0.5846  ],
[ 0.08927 ,  0.08603 ,  0.5338  ],
[ 0.08616 ,  0.08226 ,  0.5512  ],
[ 0.08332 ,  0.07606 ,  0.5664  ],
[ 0.07672 ,  0.06926 ,  0.5946  ],
[-0.241   ,  0.2419  ,  1.249   ],
[-0.1318  ,  0.289   ,  1.182   ],
[-0.1482  ,  0.2822  ,  1.199   ],
[-0.1673  ,  0.2615  ,  1.217   ],
[-0.2056  ,  0.2481  ,  1.232   ],
[-0.17    ,  0.3072  ,  1.097   ],
[-0.1799  ,  0.2972  ,  1.117   ],
[-0.1886  ,  0.2866  ,  1.139   ],
[-0.1988  ,  0.2737  ,  1.17    ],
[-0.2035  ,  0.3251  ,  1.098   ],
[-0.211   ,  0.3123  ,  1.118   ],
[-0.2172  ,  0.2954  ,  1.138   ],
[-0.2185  ,  0.2835  ,  1.169   ],
[-0.2263  ,  0.3407  ,  1.117   ],
[-0.2309  ,  0.3242  ,  1.134   ],
[-0.233   ,  0.3077  ,  1.154   ],
[-0.2331  ,  0.2912  ,  1.177   ],
[-0.2407  ,  0.3499  ,  1.155   ],
[-0.244   ,  0.3359  ,  1.167   ],
[-0.2462  ,  0.323   ,  1.176   ],
[-0.2482  ,  0.3002  ,  1.193   ]], dtype=float32)

是42个坐标(x y z(。这就是型号:

model = Sequential()
model.add(Conv2D(32, (5, 5), activation = 'relu', input_shape = (320, 320, 3)))
model.add(MaxPool2D((2, 2)))
model.add(Conv2D(64, (5, 5), activation = 'relu'))
model.add(MaxPool2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(MaxPool2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(Flatten())
model.add(Dense(64, activation = 'relu'))
model.add(Dense(42, activation = 'linear'))

keras抛出了这个错误:

ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (20, 42, 3)

我该如何解决?

这是因为您的模型输出形状是[None,42]或用于解释[n,42],其中n是输入数量,而您需要输出看起来像[None,42,3]。为此,您可以输出126个值,然后将它们重新整形为[42,3]。你可以这样做

model.add(Dense(126,activation = 'linear')) ##Changing the output layer
Y_train = Y_train.reshape(-1,126)
model.fit(X_train,Y_train)
pred = model.predict(X_test)
pred = pred.reshape(-1,42,3) ## I guess you get the pattern by now

但这并不是解决问题的最佳方法。更好的方法是使用卷积层作为输出,这样x、y、z分量就可以相互关联,帮助模型快速学习,但这对初学者来说可能非常困难。

最新更新