最近遇到一个问题,自己训练好神经网络,输出的是特征数,但是结果需要送到分类器中,分类器计算准确率需要标签,
所以需要解决的问题是:
在生成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的强大切片功能,定义如下函数:
可以将数据分成只有数据和只有label,数据送进网络,label和网络输出端的值贴到一起,就可以输出带标签的预测值了。
利用np.expand_dims将二维的标签数组变为三维的。因为贴标签用的函数np,c_()函数要求这两个arrayde 维度必须是一致的。
利用np.c_()将预测的标签和预测值贴到一起就可以了。