#python #keras #deep-learning #nameerror #batch-normalization
#python #keras #глубокое обучение #ошибка имени #пакетное нормирование
Вопрос:
Попытка обучить надежную модель 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
Однако, при попытке сделать это, я получаю ошибку 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,128,1)
---> 57 models = Robust_CNN()
58 #models = CLDNN()
59 #models = resnet(xx_shape)
~AppDataLocalProgramsPythonPython37ScriptsFYPOptimizing-Modulation-Classification-with-Deep-Learning-masterOptimizing-Modulation-Classification-with-Deep-Learning-masterRobust_CNN Modelmodel.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
Кажется, не могу понять, почему это происходит, даже если я уже импортировал BatchNormalization.
Комментарии:
1. Не удается воспроизвести ошибку, я только что вставил ваш код, и он работает, я бы сказал, что у вас ошибка где-то в другом месте, возможно, проблема с зависимостью?
2. О, я понимаю. Рассмотрим это подробнее. Большое вам спасибо!
Ответ №1:
Сначала импортируйте BatchNormalization
из tensorflow.keras.layers
, затем запустите свой код:
from tensorflow.keras.layers import BatchNormalization
Ответ №2:
Добавьте это в свой код-
from tensorflow.keras.layers import BatchNormalization
Ответ №3:
# import BatchNormalization
from keras.layers.normalization import BatchNormalization
Комментарии:
1. из tensorflow.keras. слои импортируют BatchNormalization
Ответ №4:
импортировать BatchNormalization
из tensorflow.keras.слои импортируют BatchNormalization
Комментарии:
1. Уже есть три подобных ответа; зачем добавлять новый?