tengo un problema de importación al ejecutar mi código:
from keras.models import Sequential from keras.layers.normalization import BatchNormalization
2021-10-06 22:27:14.064885: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found 2021-10-06 22:27:14.064974: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine. Traceback (most recent call last): File "C:\Data\breast-cancer-classification\train_model.py", line 10, in <module> from cancernet.cancernet import CancerNet File "C:\Data\breast-cancer-classification\cancernet\cancernet.py", line 2, in <module> from keras.layers.normalization import BatchNormalization ImportError: cannot import name 'BatchNormalization' from 'keras.layers.normalization' (C:\Users\Catalin\AppData\Local\Programs\Python\Python39\lib\site-packages\keras\layers\normalization\__init__.py)
La biblioteca se instala también con
pip install numpy opencv-python pillow tensorflow keras imutils scikit-learn matplotlib
¿Tienes alguna idea?
Está utilizando importaciones obsoletas para tf.keras
. Las capas ahora se pueden importar directamente desde tensorflow.keras.layers
:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import ( BatchNormalization, SeparableConv2D, MaxPooling2D, Activation, Flatten, Dropout, Dense ) from tensorflow.keras import backend as K class CancerNet: @staticmethod def build(width, height, depth, classes): model = Sequential() shape = (height, width, depth) channelDim = -1 if K.image_data_format() == "channels_first": shape = (depth, height, width) channelDim = 1 model.add(SeparableConv2D(32, (3, 3), padding="same", input_shape=shape)) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(SeparableConv2D(64, (3, 3), padding="same")) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(SeparableConv2D(64, (3, 3), padding="same")) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(SeparableConv2D(128, (3, 3), padding="same")) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(SeparableConv2D(128, (3, 3), padding="same")) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(SeparableConv2D(128, (3, 3), padding="same")) model.add(Activation("relu")) model.add(BatchNormalization(axis=channelDim)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(256)) model.add(Activation("relu")) model.add(BatchNormalization()) model.add(Dropout(0.5)) model.add(Dense(classes)) model.add(Activation("softmax")) return model model = CancerNet()
Debe importar BatchNormalization de la siguiente manera:
from tensorflow.keras.layers import BatchNormalization