一层在keras中的拆分输出



说,我有一个带有DIMS(4,x,y)的图层。我想将其分成4个单独的(1,x,y)张量,我可以用作其他4层的输入。

我本质上寻找的是合并层的对立面。我知道Keras中没有拆分层,但是在Keras中有一种简单的方法吗?

您是否正在寻找类似的东西?

import keras.backend as K
import numpy as np
val = np.random.random((4, 2, 3))
t = K.variable(value=val)
t1 = t[0, :, :]
t2 = t[1, :, :]
t3 = t[2, :, :]
t4 = t[3, :, :]
print('t1:n', K.eval(t1))
print('t2:n', K.eval(t2))
print('t3:n', K.eval(t3))
print('t4:n', K.eval(t4))
print('t:n', K.eval(t))

它给出以下输出:

t1:
 [[ 0.18787734  0.1085723   0.01127671]
 [ 0.06032621  0.14528386  0.21176969]]
t2:
 [[ 0.34292713  0.56848335  0.83797884]
 [ 0.11579451  0.21607392  0.80680907]]
t3:
 [[ 0.1908586   0.48186591  0.23439431]
 [ 0.93413448  0.535191    0.16410089]]
t4:
 [[ 0.54303145  0.78971165  0.9961108 ]
 [ 0.87826216  0.49061012  0.42450914]]
t:
 [[[ 0.18787734  0.1085723   0.01127671]
  [ 0.06032621  0.14528386  0.21176969]]
 [[ 0.34292713  0.56848335  0.83797884]
  [ 0.11579451  0.21607392  0.80680907]]
 [[ 0.1908586   0.48186591  0.23439431]
  [ 0.93413448  0.535191    0.16410089]]
 [[ 0.54303145  0.78971165  0.9961108 ]
  [ 0.87826216  0.49061012  0.42450914]]]

请注意,现在t1, t2, t3, t4shape(2,3)

print(t1.shape.eval()) # prints [2 3]

因此,如果要保持3D形状,则需要执行以下操作:

t1 = t[0, :, :].reshape((1, 2, 3))
t2 = t[1, :, :].reshape((1, 2, 3))
t3 = t[2, :, :].reshape((1, 2, 3))
t4 = t[3, :, :].reshape((1, 2, 3))

现在,您将启用的张量在正确的尺寸中得到。

print(t1.shape.eval()) # prints [1 2 3]

希望它能帮助您解决问题。

您可以定义lambda层为您进行切片:

from keras.layers import Lambda
from keras.backend import slice
.
.
x = Lambda( lambda x: slice(x, START, SIZE))(x)

对于您的特定示例,请尝试:

x1 = Lambda( lambda x: slice(x, (0, 0, 0), (1, -1, -1)))(x)
x2 = Lambda( lambda x: slice(x, (1, 0, 0), (1, -1, -1)))(x)
x3 = Lambda( lambda x: slice(x, (2, 0, 0), (1, -1, -1)))(x)
x4 = Lambda( lambda x: slice(x, (3, 0, 0), (1, -1, -1)))(x)

您只需使用tf.split。

最新更新