神经网络下一批数据重塑为1D-array时遇TypeError错误求助
解决reshape时的TypeError问题
看起来你在为LSTM准备批量数据做维度重塑时踩了个小坑,这个报错的根源其实很清晰:
报错原因
numpy的reshape()方法不接受None作为维度参数——它要求每个维度参数要么是整数,要么是**-1**(用来让numpy自动推导该维度的大小)。你代码里用了None,Python把它识别为NoneType,自然没法当作整数来处理,所以抛出了这个错误。
另外顺便提一句:也要确认X_t[num-1]和y_t[num-1]本身不是None值,不过从报错栈来看,主要问题还是出在reshape的参数上。
修正后的代码
把所有reshape里的None替换成-1就可以解决这个问题,修改后的函数如下:
def next_batch(X_t,y_t,num,batch_size): return X_t[num-1].reshape(-1, batch_size, 1), y_t[num-1].reshape(-1, 1, 1)
这里的-1是numpy的特殊占位符,它会根据数组的总元素数量,结合你指定的其他维度大小,自动计算出这个维度的正确数值。
额外注意事项
- 确保
X_t[num-1]的总元素数能被batch_size * 1整除,否则reshape会抛出维度不匹配的错误;同理y_t[num-1]的元素数要能被1*1整除(这个一般不会有问题,但也要留意数据的完整性)。 - 如果你的目标是生成纯1D数组(比如形状为
(n,)),那可以直接用reshape(-1),比如X_t[num-1].reshape(-1),不过从你原代码的维度设计来看,应该是在为LSTM准备带时间步的输入,所以当前的(-1, batch_size, 1)应该更符合你的需求。
内容的提问来源于stack exchange,提问作者Sergiu Groza




