numpy广播的keras回调错误
Posted
技术标签:
【中文标题】numpy广播的keras回调错误【英文标题】:keras callback error with numpy broadcast 【发布时间】:2018-10-25 09:56:18 【问题描述】:我在用keras搭建rnn+dense模型实现连体分类器,出现操作数不能和shape一起广播(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 和标签,注意标签在输入中,因为损失函数会使用它。
【问题讨论】:
你能给我们更多关于数据输入形状和你的网络的信息吗?你使用了什么样的 keras 回调? 【参考方案1】:您是否将 Input layer 的第一个维度设置为特定的 batch_size 或其他数字?
例如x_in = Input(shape=(4, num_feature))
可能会导致这个错误(4
在我自己的情况下是 batch_size),当我把它改成x_in = Input(shape=(None, num_feature))
时,这个错误就消失了。
【讨论】:
以上是关于numpy广播的keras回调错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Keras 上的回调保存我的模型时,Sequential' 对象没有属性 '_ckpt_saved_epoch' 错误
ValueError: operands could not be broadcast together with shapesnumpy广播错误