Как очистить память или использовать SageMaker вместо этого, чтобы избежать ошибки MemoryError: невозможно выделить для массива с формой (25000, 2000) и типом данных float64 - PullRequest
1 голос
/ 12 июля 2020

Я использую keras для обучения модели в SageMaker, вот код, который я использую, но получаю ошибку:

MemoryError: Unable to allocate 381. MiB for an array with shape (25000, 2000) 
    and data type float64

Вот код:

import pandas as pd
import numpy as np
from keras.datasets import imdb
from keras import models, layers, optimizers, losses, metrics
import matplotlib.pyplot as plt

# load imbd preprocessed dataset
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
    num_words=2000)

# one-hot encoding all the integer into a binary matrix
def vectorize_sequences(sequences, dimension=2000):
    results = np.zeros((len(sequences), dimension))        
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.                          
    return results

x_train = vectorize_sequences(train_data)                  
x_test = vectorize_sequences(test_data)

Затем я получаю сообщение об ошибке.

В первый раз, когда я запускаю этот код, он работает, но он не работает, когда я пытался повторно запустить его, как я могу исправить это, очистив память или есть способ, которым я можно ли использовать память в SageMaker?

1 Ответ

3 голосов
/ 12 июля 2020

Я не знаю конкретно о SageMaker или AWS, но что-то, что вы можете сделать, - это преобразовать свой ввод в float32, что занимает меньше места в памяти. Вы можете преобразовать его так:

train_data = tf.cast(train_data, tf.float32)

float32 - это значение по умолчанию для весов Tensorflow, поэтому float64 вам все равно не понадобится. Доказательство:

import tensorflow as tf
layer = tf.keras.layers.Dense(8)
print(layer(tf.random.uniform((10, 100), 0, 1)).dtype)
<dtype: 'float32'>

Другие мои предложения - получить меньше слов из вашего набора данных или не кодировать их сразу. Если вы планируете обучать повторяющуюся модель со слоем внедрения, вам все равно не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...