“BatchNormalization”未定义

Nan*_*ula 1 python nameerror deep-learning keras batch-normalization

尝试训练一个 Robust CNN 模型,其定义如下:

from keras.datasets import cifar10
from keras.utils import np_utils
from keras import metrics
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, LSTM, merge
from keras.layers import BatchNormalization
from keras import metrics
from keras.losses import categorical_crossentropy
from keras.optimizers import SGD
import pickle
import matplotlib.pyplot as plt
import numpy as np 
from keras.preprocessing.image import ImageDataGenerator
from keras import layers
from keras.callbacks import EarlyStopping



def Robust_CNN():
    
    model = Sequential()
    model.add(Conv2D(256, (3, 3), activation='relu', padding='same', init='glorot_uniform', input_shape=(2,128,1)))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(1, 2), padding='valid',  data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Conv2D(128, (3, 3), activation='relu', init='glorot_uniform', padding='same'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(1, 2), padding='valid', data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Conv2D(64, (3, 3), activation='relu', init='glorot_uniform', padding='same'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(1, 2), padding='valid', data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Conv2D(64, (3, 3), activation='relu', init='glorot_uniform', padding='same'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(1, 2), padding='valid', data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Flatten())
    model.add(Dense(128, activation='relu', init='he_normal'))
    model.add(BatchNormalization())
    model.add(Dense(11, activation='softmax', init='he_normal'))
    
    return model
Run Code Online (Sandbox Code Playgroud)

但是,当尝试这样做时,我收到一个名称错误,名称“BatchNormalization”未定义。完整的错误信息如下:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-11-8084d29438f8> in <module>
     55 # >>>>>>>>>>>>>>>>>>>>> choose a model by un-commenting only one of the three <<<<<<<<<<<<<<<<<<<<<<<<<<<
     56 #xx_shape = (2,128,1)
---> 57 models = Robust_CNN()
     58 #models = CLDNN()
     59 #models = resnet(xx_shape)

~\AppData\Local\Programs\Python\Python37\Scripts\FYP\Optimizing-Modulation-Classification-with-Deep-Learning-master\Optimizing-Modulation-Classification-with-Deep-Learning-master\Robust_CNN Model\model.py in Robust_CNN()
     19 def Robust_CNN():
     20 
---> 21     model = Sequential()
     22     model.add(Conv2D(256, (3, 3), activation='relu', padding='same', init='glorot_uniform', input_shape=(2,128,1)))
     23     model.add(BatchNormalization())

NameError: name 'BatchNormalization' is not defined

Run Code Online (Sandbox Code Playgroud)

即使我已经导入了 BatchNormalization,似乎也无法弄清楚为什么会这样。

小智 5

首先BatchNormalization从导入tensorflow.keras.layers,然后运行您的代码:

from tensorflow.keras.layers import BatchNormalization
Run Code Online (Sandbox Code Playgroud)