Reputation: 69
I am trying to train a model that includes 3D Conv layers using keras library on google colab. I run into this error:
AttributeError Traceback (most recent call last)
<ipython-input-5-c6ef25f2bc4a> in <module>()
8
9 model = Sequential()
---> 10 model.add(Conv3D(16,kernel_size=(3,5,3),padding='same', activation='relu', kernel_initializer='he_normal', input_shape=(20,25,3,1),data_format='channels_first'))
11 model.add(Conv3D(32,kernel_size=(3,3,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_first'))
12 model.add(Dropout(0.5))
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in _get_available_gpus()
504 _LOCAL_DEVICES = [x.name for x in devices]
505 else:
--> 506 _LOCAL_DEVICES = tf.config.experimental_list_devices()
507 return [x for x in _LOCAL_DEVICES if 'device:gpu' in x.lower()]
508
AttributeError: module 'tensorflow._api.v2.config' has no attribute 'experimental_list_devices'
This problem doesnt happen when I try 2D conv layers. Only with 3D conv layers. I should also mention that this code run on my local machine just fine.
The whole code block is
import keras
from keras.models import Sequential, Model
from keras.layers import Dense, Flatten, Conv3D, MaxPooling3D, Dropout, BatchNormalization, Input
from keras.utils import to_categorical
from keras import regularizers
model = Sequential()
model.add(Conv3D(16,kernel_size=(3,5,3),padding='same', activation='relu', kernel_initializer='he_normal', input_shape=(20,25,3,1),data_format='channels_first'))
model.add(Conv3D(32,kernel_size=(3,3,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_first'))
model.add(Dropout(0.5))
#model.add(MaxPooling3D(pool_size=(2, 2,2)))
model.add(Conv3D(64,kernel_size=(3,5,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_first'))
model.add(MaxPooling3D(pool_size=(2, 2,2)))
model.add(Dropout(0.5))
model.add(Conv3D(128,kernel_size=(3,5,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_first'))
#model.add(MaxPooling3D(pool_size=(2, 2,2)))
#model.add(Conv3D(64,kernel_size=(3,3,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_last'))
#model.add(Conv3D(128,kernel_size=(3,3,3),padding='same', activation='relu', kernel_initializer='he_normal',data_format='channels_last'))
model.add(BatchNormalization(center=True, scale=True))
model.add(Flatten())
model.add(Dropout(0.5))
#model.add(Dense(10000, activation='relu', kernel_initializer='he_normal'))
model.add(Dense(5000, activation='relu', kernel_initializer='he_normal'))
model.add(Dropout(0.5))
model.add(Dense(300, activation='relu', kernel_initializer='he_normal'))
model.add(Dense(20, activation='softmax'))
from keras.callbacks import ReduceLROnPlateau
model.compile(loss='categorical_crossentropy',
optimizer=keras.optimizers.Adam(lr=0.001),
metrics=['accuracy'])
model.summary()
reduce_lr = ReduceLROnPlateau(monitor='val_accuracy', factor=0.8,mode = 'max',patience=5, min_lr=0.0001)
# Fit data to model
history = model.fit(X_train, y_train,
callbacks =[reduce_lr],
batch_size=128,
epochs=300,
verbose=1,
validation_split=0.2)
score, acc = model.evaluate(X_test, y_test,
batch_size=128)
print('Test score:', score)
print('Test accuracy:', acc)
Upvotes: 0
Views: 351
Reputation: 366
Try to add this code
import tensorflow as tf
import keras.backend.tensorflow_backend as tfback
print("tf.__version__ is", tf.__version__)
print("tf.keras.__version__ is:", tf.keras.__version__)
def _get_available_gpus():
"""Get a list of available gpu devices (formatted as strings).
# Returns
A list of available GPU devices.
"""
#global _LOCAL_DEVICES
if tfback._LOCAL_DEVICES is None:
devices = tf.config.list_logical_devices()
tfback._LOCAL_DEVICES = [x.name for x in devices]
return [x for x in tfback._LOCAL_DEVICES if 'device:gpu' in x.lower()]
tfback._get_available_gpus = _get_available_gpus
you should also look at this for further solution: https://github.com/keras-team/keras/issues/13684
Upvotes: 2