我正在使用 lambda 函数设计一个特定的 keras 层,如何batch_size
在函数中获得动态?
我尝试了很多次来解决这个问题,但都失败了。
def minus(inputs):
x,y = inputs
batch_size=K.shape(x)[0]
e = K.get_variable_shape(x)
for k in range(e[0]):
for i in range(e[1]):
for j in range(e[2]):
if x[k][i][j]==0:
K.update(x[k][i][j], y[k][i][j])
return x
def mymodel():
inpA = keras.layers.Input(shape=(10,8),name='InputLayerA')
inpB = keras.layers.Input(shape=(10,8),name='InputLayerB')
print(inpA.shape)
middle = keras.layers.Lambda(minus,name='minus')([inpA,inpB])
ae = keras.Model([inpA,inpB],middle)
ae.summary()
return ae
当我新建一个模型时,比如ae = mymodel()
.I 除了一个新的 x 张量,但实际是错误消息:'NoneType' object cannot be interpreted as an integer
。
使用 tensorflow 时,我使用 tf.shape(x) 来获取模型层的批量大小,所以我认为可以使用 K.shape(x)(keras 等效?)是对的。
如果我理解您尝试正确做的事情,这还不够吗?避免了缓慢的python for循环的好处。
import keras
import keras.backend as K
def minus(inputs):
x,y = inputs
change_index = K.cast(K.equal(x, 0),'float32')
return x*(1-change_index)+y*change_index
def mymodel():
inpA = keras.layers.Input(shape=(10,8),name='InputLayerA')
inpB = keras.layers.Input(shape=(10,8),name='InputLayerB')
print(inpA.shape)
middle = keras.layers.Lambda(minus,name='minus')([inpA,inpB])
ae = keras.Model([inpA,inpB],middle)
ae.summary()
return ae
ae = mymodel()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句