Select Tensorflow 1 层中的特定功能

Select specific features in a Tensorflow 1 layer

我跟随 this tutorial and used the ipynb notebook from the Github page 在 Google Colaboratory 中生成了 deepdream 图像。本教程使用 Inception5h 网络。该模型中的 12 个层通常用于生成图像。

每一层都包含大约 500 个独立的特征,它们可以识别不同的模式。 select 图层中的特定功能可能会产生不同的结果。我已经在第 6 层 'mixed4a:0' 中生成了每个特征的图像。我现在想做的是混合这些功能。

特定层 select 像这样编辑:

layer_tensor = model.layer_tensors[5]
# selects layer 6 out of 12

我可以 select 一系列这样的功能:

layer_tensor = model.layer_tensors[5][:,:,:,0:3]
# selects feature 0 to 2 from layer 6

我想做的是 select 特定功能,而不是一系列功能。我已经尝试了一些显然不起作用的东西。

layer_tensor = model.layer_tensors[5][:,:,:,0,2,4]
layer_tensor = model.layer_tensors[5][:,:,:,0:2:4]
layer_tensor = model.layer_tensors[5][:,:,:,[0,2,4]]
layer_tensor = model.layer_tensors[5][:,:,:,[0:2:4]]
layer_tensor = model.layer_tensors[5][:,:,:,(0,2,4)]

试图弄清楚 object/thing/data 结构 'layer_tensor' 是什么类型,我尝试用不同的参数打印它:

layer_tensor = model.layer_tensors[5]
# prints Tensor("mixed4a:0", shape=(?, ?, ?, 508), dtype=float32, device=/device:CPU:0)
# "mixed4a:0" is the layer name. 508 in 'shape' is the number of features in the layer

layer_tensor = model.layer_tensors[5][:,:,:,0:100]
# prints: Tensor("strided_slice_127:0", shape=(?, ?, ?, 100), dtype=float32)

layer_tensor = model.layer_tensors[5][:,:,:,0]
# prints: Tensor("strided_slice_128:0", shape=(?, ?, ?), dtype=float32)

总的来说,我是 Tensorflow 和神经网络的新手。有谁知道如何 select 不同的功能,而不仅仅是一系列功能?提前致谢!

为了 运行 代码,将 'DeepDream_using_tensorflow.ipynb' 文件加载到 Google Colaboratory。 Select Python3 运行 GPU 后端时间。将文件 'download.py' 和 'inception5h.py' 上传到 运行 时间,它应该可以正常工作。

您可以使用tf.gather通过以下方式实现您所需要的。

# don't forget to have a look over the deep_dream_final_output.html file to see the processed outputs.

indices = [1,3,5]
layer_tensor = tf.transpose(
    tf.gather(
        tf.transpose(model.layer_tensors[10], [3,0,1,2]), indices
        ), 
    [1,2,3,0])
print(layer_tensor)
img_result = recursive_optimize(layer_tensor=layer_tensor, image=image,
                 num_iterations=10, step_size=3.0, rescale_factor=0.7,
                 num_repeats=4, blend=0.2)

它看起来很复杂,但它所做的只是跟随。

  • 转置 layer_tensor s.t。最后一个轴(即你想要切片的轴)是第一个轴(因为它使得切片更容易)
  • 使用 tf.gather 进行切片。我们正在采用 1,3,5 特征。它可能是一个索引列表
  • 将张量转置回正确的形状(即将第一个轴发送到最后)。

希望已经清楚了。