Я создаю свои скрытые слои как вложенный список, то есть список MLP, каждый из которых содержит другой. список скрытых слоев. Кажется, моя проблема связана с тем, как я создаю этот вложенный список, как показано ниже:
Код: Выделить всё
def __init__(self):
super().__init__()
# units is a list of integers denoting the number of units per layer
# activation is a list of str denoting the activation function of each layer
# nMLP is the number of parallel MLPs
# Create layers
self.units = [5,5,5,5]
self.activation = ['relu','relu','relu','relu']
self.nlayer = len(self.units)
self.nMLP = 3
# DOES NOT WORK #
# self.layer_hidden = [
# [
# [] for _ in range(self.nlayer)
# ] for _ in range(self.nMLP)
# ]
# for iMLP in range(self.nMLP):
# for ilayer, (nunits, act) in enumerate(zip(self.units, self.activation)):
# self.layer_hidden[iMLP][ilayer] = Dense(units=nunits, activation=act)
# WORKS #
self.layer_hidden = [
[
Dense(units=nunits, activation=act) for nunits, act in zip(units, activation)
] for _ in range(self.nMLP)
]
Однако при обучении подход с вложенным циклом приводит к очень большому количеству ошибок и не сходится. , в то время как подход к пониманию вложенных списков прекрасно сходится и способен точно предсказать данные. Я изолировал его в этом фрагменте кода, просто закомментировав любой раздел и переобучив модель.
Оба подхода к динамическому созданию слоев действительны для одного списка слоев (не вложенных). Но по какой-то причине вложение приводит к этой проблеме. В других сообщениях о динамическом создании слоев также рекомендуются оба подхода: Как создать динамическое количество слоев в Tensorflow?
Я реализовал метод build_graph(): Как построить график Keras/Tensorflow подклассификация модели API? чтобы визуализировать структуру моего графа, и оба они эквивалентны и правильны.
Я что-то упускаю?
Подробнее здесь: https://stackoverflow.com/questions/790 ... den-layers