报这种错误的原因主要是2328750 不等于四个数相乘(200×234×1×数据输出长度≠2328750),我碰到错之后,看了一下网上的解决方案好像都没有怎么说清楚这个问题。我也无法说明其具体原理,但是经过修改我成功解决了这个问题,以下是我的解决方案。
在导入数据后,我原本的代码是:
y_train = np.array(y_train,dtype='float32').reshape(-1,4)
X_train = np.array(X_train,dtype='float32').reshape(-1,200,234,1))
为了方便解释,reshape函数中的数字分别为(-1,a,b,c)
总的原理是要使 X_train输出长度 × a × b × c=2328750,其中倍数相当于输出列表的长度,即len(X_train[0])。
①其中 a = len(X_train[0])=230。
len(X_train[0])
②在我这个案例中,由于我需要使最后y_train 的个数和X_train 相同。我的len(y_train[0])=4,最后生成的y_train长度为75。即需要 X_train输出长度=75 ,这个数字不用写在函数中,是用于我们的计算。
③于是2328750/75=31050,即我的reshape函数中 a×b×c = 31050。
④同时,由于 a 是len(X_train[0])=230,即 b×c =135 ,关于 b c 我并不确定修改方式,这里我当成135×1,即 b = 135 ,c = 1。
此时:X_train输出长度(75=生成的y_train长度)× a(len(X_train[0])) × b(135) × c(1)=2328750
最后我的代码更改为
X_train = np.array(X_train,dtype='float32').reshape(-1,len(X_train[0]),135,1)
这样修改之后就没有报错了。