Почему небольшая сеть (<2k параметров) превышает лимит Keras optimizer?

#tensorflow #optimization #keras #deep-learning #neural-network

#tensorflow #оптимизация #keras #глубокое обучение #нейронная сеть

Вопрос:

Я работаю над очень маленькой моделью с параметрами менее 2 тыс.:

 Model: "model"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input1 (InputLayer)            [(None, 4, 5562, 10)  0                                            
__________________________________________________________________________________________________
dense (Dense)                   (None, 4, 5562, 64)  704         input1 [0][0]              
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 4, 5562, 16)  1040        dense[0][0]                      
__________________________________________________________________________________________________
dense_2 (Dense)                 (None, 4, 5562, 1)   17          dense_1[0][0]                    
__________________________________________________________________________________________________
reshape (Reshape)               (None, 4, 5562)      0           dense_2[0][0]                    
__________________________________________________________________________________________________
input2 (InputLayer)             [(None, 4, 5562)]    0                                            
__________________________________________________________________________________________________
CustomOp(CustomOp)              (None, 4, 5562)      0           reshape[0][0]                    
                                                                 input2 [0][0]                              
__________________________________________________________________________________________________
output (Cropping1D)             (None, 1, 5562)      0           CustomOp[0][0]                      
==================================================================================================
Total params: 1,761
Trainable params: 1,761
Non-trainable params: 0
__________________________________________________________________________________________________
 

Но когда я обучаю эту модель, она постоянно сообщает об ошибке: BiasGrad requires tensor size <= int32 max

InvalidArgumentError: для BiasGrad требуется размер тензора <= int32 max
[[{{обучение узлов/Adam/градиенты / градиенты / плотный/BiasAdd_grad/BiasAddGrad}}]]

Я уверен, что модель верна, потому что, когда я уменьшаю число нейтронов, она работает нормально.

Я очень удивлен, как такая маленькая сеть может превышать лимит Keras optimizer. Кто-нибудь может дать мне несколько советов?

Комментарии:

1. Я думаю, нам нужно больше информации, об этом невозможно догадаться только из сводки модели. Воспроизводимый код был бы лучшим

2. Спасибо, доктор Снупи. Мой пользовательский код слоя слишком велик для копирования. Но пользовательский уровень требует, чтобы все тензоры в пакете вычислялись. Я думаю, возможно, это вызывает проблему. Если batchsize = 2K, максимальная форма тензора равна (2K, 4, 5562, 64) , она больше, чем int32.

Ответ №1:

Эта ошибка относится к числу элементов в тензоре, превышающему значение max int32, а не к ошибке памяти, связанной с количеством весов. Если ваши размеры верны и ничто в вашем пользовательском слое не генерирует массивный тензор, уменьшение размера пакета должно решить проблему.