Problema con quantizzazione MATLAB: Min/Max del FeatureInputLayer alterati e impossibilità di conservarli senza perdere la quantizzazione
Show older comments
Sto riscontrando un comportamento anomalo durante la quantizzazione di una rete dlnetwork in MATLAB usando dlquantizer.
La mia rete ha un FeatureInputLayer con normalizzazione "rescale-zero-one" e quindi con i vettori Min e Max originali (dimensione 1×46 double).
Nel momento in cui quantizzo la rete, per qualche ragione questi valori vengono alterati automaticamente da MATLAB e diventano un vettore 46×1 (single) , composto quasi completamente da zero e altri valori che non corrispondono ai range reali delle mie feature (46 variabili, 120 osservazioni).
Questo causa un problema:
- la rete quantizzata non riesce più a normalizzare gli input correttamente
- e va in errore quando provo a testare la rete con dei dati di test perché Min e Max non combaciano con il formato input richiesto (1×46).
Ho provato a risolvere in due modi:
Tentativo 1 — ripristinare Min/Max dopo quantizzazione
Avrei voluto fare:
qNet.Layers(1).Min = BestNet.Layers(1).Min;
ma non è possibile perché dlnetwork ha proprietà read-only.
Quindi ho provato a ricreare il FeatureInputLayer corretto tramite layerGraph e replaceLayer.
Funziona, ma appena modifico un layer di qNet, MATLAB perde la quantizzazione e la rete torna float32.
Lo verifico con:
details = quantizationDetails(qNet);
% isQuantized = 0
Quindi non posso correggere Min/Max senza distruggere la quantizzazione.
Tentativo 2 — rimuovere la normalizzazione dal FeatureInputLayer
Ho sostituito il layer di input con uno con:
Normalization = "none"
e poi normalizzo manualmente gli input usando i min/max del training set prima di fare predict.
Questo workaround funziona per l’inferenza, ma non è chiaro se sia la procedura corretta né se esista un metodo ufficiale per evitare la sovrascrittura dei Min/Max nella rete quantizzata.
Inoltre non riesco ad esportare la rete quantizzata in .onnx, c'è un modo per farlo?
Answers (1)
Anumeha
on 15 Dec 2025
0 votes
Ciao Nunzia,
dato che l’italiano non è la mia lingua madre, rispondo in inglese. Spero possa essere d’aiuto!
I understand you are trying to prevent “Min/Max” from being overwritten in quantized networks. Please go through the following documentation links for a clear understanding on how the quantized network layers work:
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!