我有一个手部姿势估计数据集(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分量就可以相互关联,帮助模型快速学习,但这对初学者来说可能非常困难。