首页 > 解决方案 > 为什么 Keras 中的 Concatenate Layer 会让训练变得很慢?

问题描述

这实际上来自我之前的问题如何使用 Keras 中的 Conv2D 在 5D 张量的最后三个维度上应用卷积?

我想对batch_size * N * n * n * channel_sizeN 中每个 i 的维度进行 2D 卷积。输出预计为batch_size * N * m * m * channel_size2. 每个 i 的权重应该不同。根据上一个问题的答案,我做了以下事情:

set=[]
for i in range(N):
    conv = Conv2D(2,(4,4), strides = (4,4), activation = 'relu') \
    (Lambda(lambda x : x[:,i,:,:,:])(input_layer)) # split the tensor and apply the convolution
    resh = Reshape((1,4,4,2))(conv) #expand the dimension for concatenation
set.append(resh)


conv_layer = Concatenate(axis = 1)(set)

代码似乎是正确的。但它有以下缺点:

  1. 模型的总结报告变得相当复杂。它将列出每个 i 的层。
  2. 即使权重的数量不是很大,网络的训练也会变得非常慢(对于 N = 320)。我不确定这是由于循环中的代码还是由于连接层。

任何建议将不胜感激。

标签: pythontensorflowmachine-learningkerasconv-neural-network

解决方案


推荐阅读