Проблема с использованием GPU с TensorFlow - PullRequest
3 голосов
/ 29 апреля 2019

Я пытаюсь обучить сеть (lrcn, то есть CNN, а затем LSTM), используя TensoFlow, вот так:

model=Sequential();                          
..
.
.
# my model 

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit_generator(generator=training_generator,
                validation_data=validation_generator,
                use_multiprocessing=True,
                workers=6)

Я следую по этой ссылке , чтобы создать класс генератора. Это выглядит так:

class DataGenerator(tf.keras.utils.Sequence):
# 'Generates data for Keras'
def __init__(self, list_ids, labels, batch_size = 8, dim = (15, 16, 3200), n_channels = 1,
             n_classes = 3, shuffle = True):
    # 'Initialization'
    self.dim = dim
    self.batch_size = batch_size
    self.labels = labels
    self.list_IDs = list_ids
    self.n_channels = n_channels
    self.n_classes = n_classes
    self.shuffle = shuffle
    self.on_epoch_end()

def __len__(self):
    # 'Denotes the number of batches per epoch'
    return int(np.floor(len(self.list_IDs) / self.batch_size))

def __getitem__(self, index):
    # 'Generate one batch of data'
    # Generate indexes of the batch
    indexes = self.indexes[index * self.batch_size:(index + 1) * self.batch_size]

    # Find list of IDs
    list_ids_temp = [self.list_IDs[k] for k in indexes]

    # Generate data
    X, y = self.__data_generation(list_ids_temp)

    return X, y

def on_epoch_end(self):
    # Updates indexes after each epoch'
    self.indexes = np.arange(len(self.list_IDs))
    if self.shuffle:
        np.random.shuffle(self.indexes)

def __data_generation(self, list_ids_temp):
    # 'Generates data containing batch_size samples' # X : (n_samples, *dim, n_channels)
    # Initialization
    X = np.empty((self.batch_size, *self.dim, self.n_channels))
    y = np.empty(self.batch_size, dtype = int)

    sequences = np.empty((15, 16, 3200, self.n_channels))

    # Generate data
    for i, ID in enumerate(list_ids_temp):
        with h5py.File(ID) as file:
            _data = list(file['decimated_data'])

        _npData = np.array(_data)
        _allSequences = np.transpose(_npData)

        # a 16 x 48000 matrix is split into 15 sequences of size 16x3200
        for sq in range(15):
            sequences[sq, :, :, :] = np.reshape(_allSequences[0:16, i:i + 3200], (16, 3200, 1))
        # Store sample
        X[i, ] = sequences

        # Store class
        y[i] = self.labels[ID]

    return X, tf.keras.utils.to_categorical(y, num_classes = self.n_classes)

Это работает нормально, и код выполняется, однако я заметил, что использование графического процессора остается равным 0. Когда я устанавливаю для log_device_placement значение true, оно показывает операции, назначаемые графическому процессору. Но когда я наблюдаю за GPU с помощью диспетчера задач или nvidia-smi, я не вижу активности.

Но когда я не использую класс DataGenerator и просто использую model.fit (), используя сгенерированный, как показано ниже, я замечаю, что программа использует GPU.

data = np.random.random((550, num_seq, rows, cols, ch))    
label = np.random.random((num_of_samples,1))

_data['train'] = data[0:500,:]
_label['train'] = label[0:500, :]

_data['valid'] = data[500:,:]
_label['valid']=label[500:,:]

model.fit(data['train'],
                    labels['train'],
                    epochs = FLAGS.epochs,
                    batch_size = FLAGS.batch_size,
                    validation_data = (data['valid'], labels['valid']),
                    shuffle = True,
                    callbacks = [tb, early_stopper, checkpoint])'

Так что я полагаю, что это не может быть, потому что мои драйверы NVIDIA были установлены неправильно или TensorFlow был установлен неправильно, и это сообщение я получаю, когда запускаю оба кода, что указывает на то, что TF может распознать мой GPU , что заставляет меня поверить, что что-то не так с моим DataGenerator классом и / или fit_generator()

Может кто-нибудь помочь мне указать, что я делаю неправильно?

Я использую TensorFlow 1.10 и cUDA 9 на компьютере с Windows 10 с GTX 1050Ti.

...