给LSTM网络训练的数据添加标签(三维数组的一维增加数据)

最近遇到一个问题,自己训练好神经网络,输出的是特征数,但是结果需要送到分类器中,分类器计算准确率需要标签,

所以需要解决的问题是:

在生成LSTM网络的batch数时,需要加上标签,但是在神经网络进行训练时,需要去掉标签,预测完成后需要把标签列添回去。


生成带标签的time_step数据,维度如上所示,但是这其中第二维中的38维里有一维是标签,进入网络时需要去掉这一列。本来X_data是一个list,为了利用数组的切片,所以将其变为数组的形式。

此处将Y_data这个list变为数组的时候也遇到了错误,就是最后一个batch是不够38*360行,而是38*359,所以在np.array(Y_data)的时候报错了,报错信息:

22. ValueError: could not broadcast input array from shape (38,360) into shape (38)

解决方案:https://stackoverflow.com/questions/43977463/valueerror-could-not-broadcast-input-array-from-shape-224-224-3-into-shape-2

思想就是在使用np.array()这个函数将list变为数组的时候,这个list里面存的每一个array维度必须是一样的,不然就无法broadcast,会报错。

将X_data,Y_data变为数组后就可以利用array的强大切片功能,定义如下函数:

扫描二维码关注公众号,回复: 1939704 查看本文章


可以将数据分成只有数据和只有label,数据送进网络,label和网络输出端的值贴到一起,就可以输出带标签的预测值了。


利用np.expand_dims将二维的标签数组变为三维的。因为贴标签用的函数np,c_()函数要求这两个arrayde 维度必须是一致的。


利用np.c_()将预测的标签和预测值贴到一起就可以了。

猜你喜欢

转载自blog.csdn.net/orangefly0214/article/details/80934040