检查目标时出现Keras错误:预期激活_1有2个维度,但得到了形状为(10,5,95)的数组

检查目标时出现Keras错误:预期激活_1有2个维度,但得到了形状为(10,5,95)的数组,keras,Keras,我试图使用keras创建一个简单的RNN,但我得到了这个错误。 输入是由二进制类表示的字母流。形状是(10,5,95)。10批,每次5个字母,共95个字符 我猜这与作为输入反馈的错误输入有关,但我不确定如何处理它 回溯(最近一次呼叫最后一次): 文件“07_rnn.py”,第90行,在 model.fit(x,y,epochs=3,batch\u size=BATCHSIZE) 文件“/home/dmabelin/.local/lib/python3.5/site-packages/keras/

我试图使用keras创建一个简单的RNN,但我得到了这个错误。 输入是由二进制类表示的字母流。形状是(10,5,95)。10批,每次5个字母,共95个字符

我猜这与作为输入反馈的错误输入有关,但我不确定如何处理它

回溯(最近一次呼叫最后一次):
文件“07_rnn.py”,第90行,在
model.fit(x,y,epochs=3,batch\u size=BATCHSIZE)
文件“/home/dmabelin/.local/lib/python3.5/site-packages/keras/models.py”,第965行,适合
验证步骤=验证步骤)
文件“/home/dmabelin/.local/lib/python3.5/site-packages/keras/engine/training.py”,第1593行,适合
批次大小=批次大小)
文件“/home/dmabelin/.local/lib/python3.5/site packages/keras/engine/training.py”,第1430行,在用户数据中
异常(前缀='target')
文件“/home/dmabelin/.local/lib/python3.5/site packages/keras/engine/training.py”,第110行,输入数据
“带形状”+str(数据形状))
ValueError:检查目标时出错:预期激活_1有2个维度,但得到了形状为(10,5,95)的数组
代码

将numpy导入为np
导入glob
从keras.models导入顺序
从keras.layers导入LSTM,致密,活化
从keras.optimizers导入Adam
从keras.utils.np\u utils导入到\u category
CHARMAP=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz1234567890-=!@$%^&*()”、“~[]\{}}}124;”:\”、./?”
SEQLEN=5
批量大小=10
ALPHASIZE=len(字符映射)
内部大小=128
FILES=“shakespeare/*.txt”
学习率=0.001
##数据相关的东西
def char_至_值(char):
idx=CHARMAP.find(char)
如果idx>=0:
返回idx
其他:
返回0
def char到char类映射(char):
值=字符到字符值(字符)
返回到_分类(值,字母大小)
def值到字符(值):
返回CHARMAP[值]
#迭代每个文件
def get_文件_数据(模式、索引):
路径=全局。全局(模式)
长度=长度(路径)
如果索引<长度:
数据=[]
打开(路径[索引],“r”)作为文件:
对于文件中的行:
行值=[行中l的字符到类映射(l)]
数据=数据+列表(行值)
返回数据
其他:
一无所获
#获取文件中的批处理数据
def生成行数据(文件数据、序号、批次索引、批次计数):
长度=长度(文件\数据)
开始=批次索引*批次计数
结束=开始+顺序
x=[]
y=[]
而end+110:
打破
github链接:

编辑:
在LSTM中return\u sequences=True修复了它。

您试图预测什么?如果它是一个序列到序列模型,那么返回\u sequences=True是正确的方法。 错误的原因是您的目标是三维的
(batchsize,sequence\u length,features)
,如果
返回\u sequences=false
,LSTM层只输出序列最后一个时间步的
(batchsize,features)
。 因此,根据您的应用程序,您必须更改目标的形状或设置
return\u sequences=true
,就像您已经做的那样