Keras:如何仅从张量中提取某些层



我有一个形状为 [6,20,30,6] 的 4-D 张量,我想执行 keras/tensorflow 等效于:

new = np.array([old[i,:,:,i] for i in range(6)])

任何帮助不胜感激!

您可以展开old的维度,使用推导列表选择所需的切片并沿展开的维度连接它们。例如:

import tensorflow as tf
import numpy as np
tensor_shape = (6, 20, 30, 6)
old = np.arange(np.prod(tensor_shape)).reshape(tensor_shape)
new = np.array([old[i, :, :, i] for i in range(6)])
old_ = tf.placeholder(old.dtype, tensor_shape)
new_ = tf.concat([old[None, i, :, :, i] for i in range(6)], axis=0)
with tf.Session() as sess:
    new_tf = sess.run(new_, feed_dict={old_: old})
    assert (new == new_tf).all()

感谢@rvinas的回答,我才能用纯粹的 keras 来铸造这个。

def cc(x):
    return K.backend.stack([x[:,i, :, :, i] for i in range(6)], axis=1)

然后在 keras 模型定义中:

new=L.Lambda(lambda y: cc(y))(old) 

最新更新