注意: Layers 输入的张量也不能包含切片! Layers 输入的张量也不能包含切片!Layers 输入的张量也不能包含切片!
今天撸代码时:
错误是这样的:AttributeError: 'Tensor' object has no attribute '_keras_history'
百度告你: 用keras.Layers.Lambda()
这种方法是没错的,然后看自己写的代码,没问题啊,自己就是这么写的啊???各种找错。下面分享一下个人调试定位错误经验,教大家使用 Lambda后报错继续定位错误。
一般报错误是 keras 这里的代码:
File "/home/wang/anaconda3/envs/py36/lib/python3.6/site-packages/keras/engine/topology.py", line 1675, in build_map_of_graph
layer, node_index, tensor_index = tensor._keras_history
找到这个代码,将这个tensor打印出来,看它的说明以及shape,大概就知道是什么错了。
比如我这里:
Tensor("strided_slice:0", shape=(?, 70, 14, 14), dtype=float32)
这么一看,我就知道是张量切片错误,结合它的形状,我定位到如下代码:
f0 = KL.Lambda(lambda p: tf.multiply(p[0], tf.expand_dims(p[1], axis=-1)), name="score_get_f0")([y, binary_region[..., 0]])
emmm! 原来在搭建网络时,括号里传入的张量也不能用索引,必须放到Lambda处理,改成以下代码:
f0 = KL.Lambda(lambda p: tf.multiply(p[0], tf.expand_dims(p[1][..., 0], axis=-1)), name="score_get_f0")([y, binary_region])
|