使用TensorFlow搭建聊天机器人时张量形状不匹配报错如何解决
错误根因
你的训练数据和模型输入层的形状定义不匹配:
- 构造
training数组时,你给每个特征向量bag额外套了一层列表:training.append([bag]),导致最终training的形状为三维(26,1,46),其中46是你的词表长度也就是特征维度。 - 定义输入层时,你用
len(training[0])获取第二个维度的长度,此时training[0]是[bag],长度为1,所以模型输入层被定义为(?, 1),只接受第二个维度为1的输入。 - 训练时
batch_size=8,每次喂给模型的批量数据形状为(8,1,46),和输入层期待的形状不符,就触发了这个报错。
修复方案
按照以下两步修改代码即可:
- 调整训练数据构造逻辑,去掉特征向量外多余的列表嵌套
找到代码行:
修改为:training.append([bag])
修改后training.append(bag)training的形状会变为二维(26, 46),符合全连接网络的输入要求。 - 验证形状是否正确
运行代码后观察print("shape",training.shape)的输出,确认返回shape (26, 46)即代表修改正确,再启动训练就不会出现形状不匹配的报错。
内容的提问来源于stack exchange,提问作者Pradyumn Joshi
相关产品推荐
相关产品推荐

