Sha*_* RC 6 python machine-learning neural-network deep-learning keras
说,我有一个输出dims(4,x,y)的图层.我想把它分成4个单独的(1,x,y)张量,我可以用它作为4个其他层的输入.
我基本上寻找的是与Merge层相反的东西.我知道keras中没有分割层,但是在keras中有一个简单的方法吗?
from keras.layers import Lambda
from keras.backend import slice
.
.
x = Lambda( lambda x: slice(x, START, SIZE))(x)
Run Code Online (Sandbox Code Playgroud)
对于您的具体示例,请尝试:
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)
Run Code Online (Sandbox Code Playgroud)
你在找这样的东西吗?
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))
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
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]]]
Run Code Online (Sandbox Code Playgroud)
请注意,现在t1, t2, t3, t4是shape(2,3).
print(t1.shape.eval()) # prints [2 3]
Run Code Online (Sandbox Code Playgroud)
因此,如果要保持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))
Run Code Online (Sandbox Code Playgroud)
现在,您可以获得正确尺寸的吐出张量.
print(t1.shape.eval()) # prints [1 2 3]
Run Code Online (Sandbox Code Playgroud)
希望它能帮助您解决问题.