未定义“批处理标准化”

问题描述

尝试训练如下定义的稳健的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,padding='same'))
    model.add(Batchnormalization())
    model.add(MaxPooling2D(pool_size=(1,data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Conv2D(64,data_format=None))
    model.add(layers.Dropout(.3))
    model.add(Flatten())
    model.add(Dense(128,init='he_normal'))
    model.add(Batchnormalization())
    model.add(Dense(11,activation='softmax',init='he_normal'))
    
    return model

但是,当尝试这样做时,我收到一个NameError,提示未定义名称“ 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,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,1)))
     23     model.add(Batchnormalization())

NameError: name 'Batchnormalization' is not defined

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

解决方法

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

从 tensorflow.keras.layers 导入 BatchNormalization