是否有Keras函数来计算单元总数?
Keras有一个count_param()Python函数来计算人工神经网络(ANN)模型的可训练参数的总数是否有Keras函数来计算单元总数?,keras,Keras,Keras有一个count_param()Python函数来计算人工神经网络(ANN)模型的可训练参数的总数 同样,是否有一个Keras函数来计算ANN模型的单元总数?似乎没有简单的方法。例如,输入层将返回一个元组列表,其中(大多数?)其他层只返回一个元组。但在大多数情况下,以下功能应该可以工作 很明显,此函数接受一个模型并返回两个输出 输出单元总数 将每层中的单位作为列表输出 如果它在任何特定情况下都不起作用,请告诉我(因为我还没有对此进行详尽的测试) 你想要一个可以推广到任何网络或完全连
同样,是否有一个Keras函数来计算ANN模型的单元总数?似乎没有简单的方法。例如,输入层将返回一个元组列表,其中(大多数?)其他层只返回一个元组。但在大多数情况下,以下功能应该可以工作 很明显,此函数接受一个模型并返回两个输出
- 输出单元总数
- 将每层中的单位作为列表输出
你想要一个可以推广到任何网络或完全连接的网络的解决方案吗?实际上,我想要一个适用于lstm_seq2seq示例(c.f.)的解决方案。没有辍学,但有LSTM单元,所以我不确定它是否是完全连接的网络。它在“基本”ANN上运行良好,但在包含LSTM的ANN上运行不好。@XavierM,我实际上在LSTM上测试了它,它工作正常。但这取决于你需要什么样的输出。例如,假设您使用
LSTM(return\u sequences=True)
,这将以timesteps*n\u单位的形式输出单位。但是,如果您只想要n_单位
,您可能需要根据图层类型执行if-else i定义的输出大小为除批量大小外的所有倍数,因为批量大小一次概括为密集、Conv2D、LSTM(如果您采用上述计算单位的方法)
model.count_params()
from functools import reduce
from itertools import chain
import operator
def count_units(model):
tot_out = 0
out_list = []
for lyr in model.layers:
if lyr.trainable:
# This is to tackle any layers that have the output shape as a list of tuples (e.g Input layer)
if isinstance(lyr.output_shape, list):
curr_out = reduce(operator.mul, chain(*[s[1:] for s in lyr.output_shape]), 1)
# This is to tackle other layers like Dense and Conv2D
elif isinstance(lyr.output_shape, tuple):
curr_out = reduce(operator.mul, lyr.output_shape[1:], 1)
else:
raise TypeError
tot_out += curr_out
out_list.append(curr_out)
return tot_out, out_list
print(count_units(model))