python - numpy广播的keras回调错误
问题描述
我正在使用keras构建一个rnn+dense模型来实现连体分类器,并且有一个操作数不能与形状一起广播(16,5)(6,5)(16,5)错误:
Traceback (most recent call last):
File "D:/prog/COQA/project/classify_question_with_siamese_drei.py", line
122, in <module>
classifier.model.fit([question1, question2, is_same], y=None,
batch_size=16, epochs=1)
File "C:\Users\Joker\AppData\Local\Programs\Python\Python36\lib\site-
packages\keras\engine\training.py", line 1657, in fit
validation_steps=validation_steps)
File "C:\Users\Joker\AppData\Local\Programs\Python\Python36\lib\site-
packages\keras\engine\training.py", line 1219, in _fit_loop
callbacks.on_batch_end(batch_index, batch_logs)
File "C:\Users\Joker\AppData\Local\Programs\Python\Python36\lib\site-
packages\keras\callbacks.py", line 109, in on_batch_end
callback.on_batch_end(batch, logs)
File "C:\Users\Joker\AppData\Local\Programs\Python\Python36\lib\site-
packages\keras\callbacks.py", line 216, in on_batch_end
self.totals[k] += v * batch_size
ValueError: operands could not be broadcast together with shapes (16,5)
(6,5) (16,5)
keras回调on_batch_end似乎有问题,我的训练数据大小为2566和batch_size 16,这意味着(6,5)是数据的最后一部分。当我进一步探索错误并在发生广播问题的 callbacks.py 中发现:
self.totals[k] += v * batch_size
这里正常的 v 是一个 [16,5] 数组,当错误发生时,它变成了 [6,5],我想知道这里有什么问题。此外,该模型有 3 个输入,x1 x2 和标签,注意标签在输入中,因为损失函数会使用它。
解决方案
您是否使用特定的 batch_size 或其他数字设置了 Input 层的第一维?
例如x_in = Input(shape=(4, num_feature))
可能会导致此错误(4
在我自己的情况下是 batch_size),当我将其更改为 时x_in = Input(shape=(None, num_feature))
,此错误消失。
推荐阅读
- tfs - 调用目标已引发 TFS 2017 构建定义异常
- bash - 如何从具有 bash 文件名的列表中读取全局变量?
- azure-devops - Azure DevOps 2019 为什么我们的 Burndown 图表中没有跟踪故事点
- python - 按位或“|” 与 Python 中两个的正幂的加法“+”
- node.js - 如何使用自定义 url 和文件夹将图像上传到 cloudinary
- excel - 与包含/排除匹配的复杂查找
- python - “关闭和停止”功能在 macOs High Sierra 上的 Canopy 下启动的 jupyter 笔记本中不起作用
- python - psutil.cpu_times() 返回的时间“单位”是多少?
- javascript - 查找未销毁的 Vue 组件
- neo4j - 如何激活 algo.asNode() 函数是 neo4j?