Tensorflow ArrayMemoryError: невозможно выделить 10,1 ГиБ для массива с формой (1349, 1000, 1000, 1) и типом данных floa ⇐ Python
Tensorflow ArrayMemoryError: невозможно выделить 10,1 ГиБ для массива с формой (1349, 1000, 1000, 1) и типом данных floa
Каждый раз, когда я запускаю свой код на рабочем компьютере, я получаю ошибку распределения памяти. Код прекрасно работает на процессоре моего домашнего компьютера, но когда я создаю тензорный поток на своем рабочем компьютере (с процессором или графическим процессором), я получаю какую-то ошибку распределения памяти. Я попытался использовать следующий код Python для установки параметров графического процессора, но это не помогло.
config=tf.ConfigProto() config.gpu_options.allow_growth=Истина sess = tf.Session(config=config) Я пытался увеличить размер файла подкачки, уменьшить количество функций, уменьшить размер пакета, изменить мои данные на тип foat32 (вместо float64) и перестроить тензорный поток с помощью различных маноров (ЦП/ГП, обеспечение версии совместимость с версиями CUDA и cuDNN и т. д.) На данный момент я не знаю, как заставить мой код работать на этом компьютере. Может ли кто-нибудь помочь мне решить эту проблему?
Вот код:
# библиотеки импорта импортировать тензорный поток как tf из tensorflow.keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D, concatenate, BatchNormalization, Dropout из tensorflow.keras.models Модель импорта, load_model из tensorflow.keras.optimizers импортировать Адама импортировать тензорный поток как tf импортировать панд как pd импортировать numpy как np из sklearn.model_selection импорт train_test_split из изображения импорта PIL из sklearn.preprocessing импорт MinMaxScaler из keras.callbacks импорт ModelCheckpoint импортировать matplotlib.pyplot как plt импортировать предупреждения из sklearn.metrics импорт r2_score из tensorflow.keras.regularizers импорт l1, l2 #tf.compat.v1.disable_eager_execution() #config = tf.compat.v1.ConfigProto() #config.gpu_options.allow_growth = Истина #session = tf.compat.v1.Session(config=config) alerts.filterwarnings('ignore')# фильтровать предупреждения (на самом деле не работает) Защиту import_dataset (путь): # импортировать набор данных df = pd.read_csv(путь) возврат DF защита Scale_cn2 (df): # масштабируем cn2 с помощью функции журнала. дальнейшее масштабирование с помощью MinMaxScalar df['BLS900_Cn2'] = np.log(df['BLS900_Cn2']) возврат DF def Scale(df): # нужно другое масштабирование для cn2? (бревно) # масштабируем все столбцы, кроме day_sin,year_sin (уже масштабированы) масштабатор = MinMaxScaler() df[['BLS900_Cn2', 'Барометрическое давление (мбар)', 'Температура воздуха (C)', «Относительная влажность (%)», «Температура почвы (C)», «Скорость ветра (м/с)», 'Коротковолновая сеть', 'Длинноволновая сеть']] = Scaler.fit_transform(df[['BLS900_Cn2', «Атмосферное давление (мбар)», «Температура воздуха (С)», «Относительная влажность (%)», «Температура почвы (C)», «Скорость ветра (м/с)», «Коротковолновая сеть», «Длинноволновая сеть»]]) возврат DF защита get_img_dims (дф): # получаем размеры изображения с Image.open(df['img_path'].iloc[0]) как img: ширина, высота = img.size num_channel = len(img.getbands()) print('ширина изображения, высота, каналы: ', ширина, высота, num_channel) вернуть ширину, высоту, num_channel # загрузить и развернуть изображения защита load_image (путь к изображению): с Image.open(image_path) как img: img = img.convert('L')# конвертировать в оттенки серого img = img.resize((1000,1000)) img_array = np.array(img) img_array = img_array/255.0 img_array = np.expand_dims(img_array,axis=-1) вернуть img_array защита load_expand_img(df): # создаем новый столбец df с загруженными и развернутыми изображениями df['img_path']=df['img_path'].apply(load_image) возврат DF defgenerate_model(image_height, image_width, num_channel, num_features, df): # ввод изображения img_input=Input(shape=(image_height,image_width,num_channel),name='img_input') x_img=Conv2D(32,(3,3),activation='relu',padding='same')(img_input) x_img=BatchNormalization()(x_img) # добавляем пакетную нормализацию, чтобы предотвратить переобучение x_img=MaxPooling2D((2,2))(x_img) x_img=Conv2D(64,(3,3),activation='relu',padding='same')(x_img) x_img=MaxPooling2D((2,2))(x_img) x_img=Сгладить()(x_img) x_img=Dense(128,activation='relu')(x_img) x_img=Dropout(0.5)(x_img) # добавляем слой исключения, чтобы предотвратить переобучение img_output=Dense(64,activation='relu')(x_img) print('img_output.shape: ', img_output.shape) # табличный ввод tab_input=Input(shape=(num_features,),name='tab_input') x_tab=Dense(128,activation='relu',kernel_regularizer=l2(0.001))(tab_input) # добавляем регуляризацию x_tab=Dense(64,activation='relu')(x_tab) tab_output=Dense(32,activation='relu')(x_tab) print('tab_output.shape: ', tab_output.shape) # объединить ветку комбинированный = объединить ([img_output, tab_output]) x=Dense(64,activation='relu')(комбинированный) x=Dense(32,activation='relu')(x) выход = Плотный (1) (х) # создаём и компилируем модель модель=Модель(входы=[img_input,tab_input],выходы=выход) model.compile(optimizer='adam',loss='mse',metrics=['mae']) # убедитесь, что входные данные правильно отформатированы X_img=np.stack(df['img_path'].to_numpy()) X_tab=df[['day_sin', 'year_sin', 'Барометрическое давление (мбар)', «Температура воздуха (С)», «Относительная влажность (%)», «Температура почвы (С)», «Скорость ветра (м/с)», «Коротковолновая сеть», «Длинноволновая сеть»]].to_numpy() y=df['BLS900_Cn2'].to_numpy() # разделить данные на обучающие и тестовые наборы #X_img_train, X_img_test,X_tab_train,X_tab_test,y_train,y_test=train_test_split(X_img,X_tab,y,test_size=0.2,random_state=42) #разделение изображения X_img_train_val,X_img_test,X_tab_train_val,X_tab_test,y_train_val,y_test=train_test_split(X_img,X_tab,y,test_size=0.3,random_state=42) X_img_train,X_img_val,X_tab_train,X_tab_val,y_train,y_val=train_test_split(X_img_train_val,X_tab_train_val,y_train_val,test_size=0,3, случайное_состояние=42) # создаем контрольную точку модели и сохранить лучшую модель контрольная точка = ModelCheckpoint('best_model.h5', Monitor='val_loss', verbose=1, save_best_only=True, mode='min') # подогнать данные под модель история = model.fit([X_img_train,X_tab_train],y_train,validation_data=([X_img_val,X_tab_val],y_val),epochs=50,batch_size=16, обратные вызовы=[контрольная точка]) # сохраняем модель # model.save('model.h5') # загрузить модель #model = load_model('model.h5') # оценка test_loss, test_mae = model.evaluate([X_img_test, X_tab_test], y_test) print('тестовая потеря:', test_loss) print('test mae: ', test_mae) # прогнозирование на реальном тестовом наборе y_predict = model.predict([X_img_test, X_tab_test]) print('прогнозы:', y_predict, y_test) r2 = r2_score(y_test, y_predict) print('r2: ', r2) возвратная модель, история защита визуализации (история): # визуализируй plt.figure(figsize=[12, 6]) plt.subplot(1,2,1) plt.plot(history.history['потеря']) plt.plot(history.history['val_loss']) plt.xlabel('эпохи') plt.ylabel('потеря') plt.legend(['Поезд', 'Тест'], loc='верхний левый') plt.subplot(1,2,2) plt.plot(history.history['мэй']) plt.plot(history.history['val_mae']) plt.xlabel('эпохи') plt.ylabel('мэй') plt.legend(['Поезд', 'Тест'], loc='верхний левый') plt.show() если __name__ == '__main__': путь = 'ai_ready_data_new_2024_02.csv' num_features = 9 # количество столбцов табличных данных (исключая пердиктора) df = import_dataset (путь) df = масштаб (df) image_width, image_height, num_channel = get_img_dims(df) df = load_expand_img(df) модель, история =generate_model(image_height, image_width, num_channel, num_features, df) визуализировать (историю) Вот вывод кода при запуске с использованием tensorflow-CPU:
(tf) C:\Users\WPRG\Desktop\sage_AI>python cnn.py ширина изображения, высота, каналы: 1000 1000 1 2024-03-01 10:03:27.802853: I tensorflow/core/platform/cpu_feature_guard.cc:193] Этот двоичный файл TensorFlow оптимизирован с помощью библиотеки глубоких нейронных сетей oneAPI (oneDNN) для использования следующих инструкций ЦП в операциях, критически важных для производительности: AVX AVX2 Чтобы включить их в других операциях, пересоберите TensorFlow с соответствующими флагами компилятора. 2024-03-01 10:03:27.940268: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. 2024-03-01 10:03:31.571746: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. 2024-03-01 10:03:33.482046: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. img_output.shape: (Нет, 64) tab_output.shape: (Нет, 32) Traceback (последний вызов последний): Файл «C:\Users\WPRG\Desktop\sage_AI\cnn.py», строка 179, в модель, история =generate_model(image_height, image_width, num_channel, num_features, df) Файл «C:\Users\WPRG\Desktop\sage_AI\cnn.py», строка 113, вgenerate_model X_img=np.stack(df['img_path'].to_numpy()) Файл «C:\Users\WPRG\anaconda3\envs\tf\lib\site-packages\numpy\core\shape_base.py», строка 456, в стеке return _nx.concatenate(expanded_arrays, axis=axis, out=out, numpy.core._Exceptions._ArrayMemoryError: невозможно выделить 10,1 ГиБ для массива с формой (1349, 1000, 1000, 1) и типом данных float64
Каждый раз, когда я запускаю свой код на рабочем компьютере, я получаю ошибку распределения памяти. Код прекрасно работает на процессоре моего домашнего компьютера, но когда я создаю тензорный поток на своем рабочем компьютере (с процессором или графическим процессором), я получаю какую-то ошибку распределения памяти. Я попытался использовать следующий код Python для установки параметров графического процессора, но это не помогло.
config=tf.ConfigProto() config.gpu_options.allow_growth=Истина sess = tf.Session(config=config) Я пытался увеличить размер файла подкачки, уменьшить количество функций, уменьшить размер пакета, изменить мои данные на тип foat32 (вместо float64) и перестроить тензорный поток с помощью различных маноров (ЦП/ГП, обеспечение версии совместимость с версиями CUDA и cuDNN и т. д.) На данный момент я не знаю, как заставить мой код работать на этом компьютере. Может ли кто-нибудь помочь мне решить эту проблему?
Вот код:
# библиотеки импорта импортировать тензорный поток как tf из tensorflow.keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D, concatenate, BatchNormalization, Dropout из tensorflow.keras.models Модель импорта, load_model из tensorflow.keras.optimizers импортировать Адама импортировать тензорный поток как tf импортировать панд как pd импортировать numpy как np из sklearn.model_selection импорт train_test_split из изображения импорта PIL из sklearn.preprocessing импорт MinMaxScaler из keras.callbacks импорт ModelCheckpoint импортировать matplotlib.pyplot как plt импортировать предупреждения из sklearn.metrics импорт r2_score из tensorflow.keras.regularizers импорт l1, l2 #tf.compat.v1.disable_eager_execution() #config = tf.compat.v1.ConfigProto() #config.gpu_options.allow_growth = Истина #session = tf.compat.v1.Session(config=config) alerts.filterwarnings('ignore')# фильтровать предупреждения (на самом деле не работает) Защиту import_dataset (путь): # импортировать набор данных df = pd.read_csv(путь) возврат DF защита Scale_cn2 (df): # масштабируем cn2 с помощью функции журнала. дальнейшее масштабирование с помощью MinMaxScalar df['BLS900_Cn2'] = np.log(df['BLS900_Cn2']) возврат DF def Scale(df): # нужно другое масштабирование для cn2? (бревно) # масштабируем все столбцы, кроме day_sin,year_sin (уже масштабированы) масштабатор = MinMaxScaler() df[['BLS900_Cn2', 'Барометрическое давление (мбар)', 'Температура воздуха (C)', «Относительная влажность (%)», «Температура почвы (C)», «Скорость ветра (м/с)», 'Коротковолновая сеть', 'Длинноволновая сеть']] = Scaler.fit_transform(df[['BLS900_Cn2', «Атмосферное давление (мбар)», «Температура воздуха (С)», «Относительная влажность (%)», «Температура почвы (C)», «Скорость ветра (м/с)», «Коротковолновая сеть», «Длинноволновая сеть»]]) возврат DF защита get_img_dims (дф): # получаем размеры изображения с Image.open(df['img_path'].iloc[0]) как img: ширина, высота = img.size num_channel = len(img.getbands()) print('ширина изображения, высота, каналы: ', ширина, высота, num_channel) вернуть ширину, высоту, num_channel # загрузить и развернуть изображения защита load_image (путь к изображению): с Image.open(image_path) как img: img = img.convert('L')# конвертировать в оттенки серого img = img.resize((1000,1000)) img_array = np.array(img) img_array = img_array/255.0 img_array = np.expand_dims(img_array,axis=-1) вернуть img_array защита load_expand_img(df): # создаем новый столбец df с загруженными и развернутыми изображениями df['img_path']=df['img_path'].apply(load_image) возврат DF defgenerate_model(image_height, image_width, num_channel, num_features, df): # ввод изображения img_input=Input(shape=(image_height,image_width,num_channel),name='img_input') x_img=Conv2D(32,(3,3),activation='relu',padding='same')(img_input) x_img=BatchNormalization()(x_img) # добавляем пакетную нормализацию, чтобы предотвратить переобучение x_img=MaxPooling2D((2,2))(x_img) x_img=Conv2D(64,(3,3),activation='relu',padding='same')(x_img) x_img=MaxPooling2D((2,2))(x_img) x_img=Сгладить()(x_img) x_img=Dense(128,activation='relu')(x_img) x_img=Dropout(0.5)(x_img) # добавляем слой исключения, чтобы предотвратить переобучение img_output=Dense(64,activation='relu')(x_img) print('img_output.shape: ', img_output.shape) # табличный ввод tab_input=Input(shape=(num_features,),name='tab_input') x_tab=Dense(128,activation='relu',kernel_regularizer=l2(0.001))(tab_input) # добавляем регуляризацию x_tab=Dense(64,activation='relu')(x_tab) tab_output=Dense(32,activation='relu')(x_tab) print('tab_output.shape: ', tab_output.shape) # объединить ветку комбинированный = объединить ([img_output, tab_output]) x=Dense(64,activation='relu')(комбинированный) x=Dense(32,activation='relu')(x) выход = Плотный (1) (х) # создаём и компилируем модель модель=Модель(входы=[img_input,tab_input],выходы=выход) model.compile(optimizer='adam',loss='mse',metrics=['mae']) # убедитесь, что входные данные правильно отформатированы X_img=np.stack(df['img_path'].to_numpy()) X_tab=df[['day_sin', 'year_sin', 'Барометрическое давление (мбар)', «Температура воздуха (С)», «Относительная влажность (%)», «Температура почвы (С)», «Скорость ветра (м/с)», «Коротковолновая сеть», «Длинноволновая сеть»]].to_numpy() y=df['BLS900_Cn2'].to_numpy() # разделить данные на обучающие и тестовые наборы #X_img_train, X_img_test,X_tab_train,X_tab_test,y_train,y_test=train_test_split(X_img,X_tab,y,test_size=0.2,random_state=42) #разделение изображения X_img_train_val,X_img_test,X_tab_train_val,X_tab_test,y_train_val,y_test=train_test_split(X_img,X_tab,y,test_size=0.3,random_state=42) X_img_train,X_img_val,X_tab_train,X_tab_val,y_train,y_val=train_test_split(X_img_train_val,X_tab_train_val,y_train_val,test_size=0,3, случайное_состояние=42) # создаем контрольную точку модели и сохранить лучшую модель контрольная точка = ModelCheckpoint('best_model.h5', Monitor='val_loss', verbose=1, save_best_only=True, mode='min') # подогнать данные под модель история = model.fit([X_img_train,X_tab_train],y_train,validation_data=([X_img_val,X_tab_val],y_val),epochs=50,batch_size=16, обратные вызовы=[контрольная точка]) # сохраняем модель # model.save('model.h5') # загрузить модель #model = load_model('model.h5') # оценка test_loss, test_mae = model.evaluate([X_img_test, X_tab_test], y_test) print('тестовая потеря:', test_loss) print('test mae: ', test_mae) # прогнозирование на реальном тестовом наборе y_predict = model.predict([X_img_test, X_tab_test]) print('прогнозы:', y_predict, y_test) r2 = r2_score(y_test, y_predict) print('r2: ', r2) возвратная модель, история защита визуализации (история): # визуализируй plt.figure(figsize=[12, 6]) plt.subplot(1,2,1) plt.plot(history.history['потеря']) plt.plot(history.history['val_loss']) plt.xlabel('эпохи') plt.ylabel('потеря') plt.legend(['Поезд', 'Тест'], loc='верхний левый') plt.subplot(1,2,2) plt.plot(history.history['мэй']) plt.plot(history.history['val_mae']) plt.xlabel('эпохи') plt.ylabel('мэй') plt.legend(['Поезд', 'Тест'], loc='верхний левый') plt.show() если __name__ == '__main__': путь = 'ai_ready_data_new_2024_02.csv' num_features = 9 # количество столбцов табличных данных (исключая пердиктора) df = import_dataset (путь) df = масштаб (df) image_width, image_height, num_channel = get_img_dims(df) df = load_expand_img(df) модель, история =generate_model(image_height, image_width, num_channel, num_features, df) визуализировать (историю) Вот вывод кода при запуске с использованием tensorflow-CPU:
(tf) C:\Users\WPRG\Desktop\sage_AI>python cnn.py ширина изображения, высота, каналы: 1000 1000 1 2024-03-01 10:03:27.802853: I tensorflow/core/platform/cpu_feature_guard.cc:193] Этот двоичный файл TensorFlow оптимизирован с помощью библиотеки глубоких нейронных сетей oneAPI (oneDNN) для использования следующих инструкций ЦП в операциях, критически важных для производительности: AVX AVX2 Чтобы включить их в других операциях, пересоберите TensorFlow с соответствующими флагами компилятора. 2024-03-01 10:03:27.940268: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. 2024-03-01 10:03:31.571746: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. 2024-03-01 10:03:33.482046: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Выделение 2048000000 превышает 10% свободной системной памяти. img_output.shape: (Нет, 64) tab_output.shape: (Нет, 32) Traceback (последний вызов последний): Файл «C:\Users\WPRG\Desktop\sage_AI\cnn.py», строка 179, в модель, история =generate_model(image_height, image_width, num_channel, num_features, df) Файл «C:\Users\WPRG\Desktop\sage_AI\cnn.py», строка 113, вgenerate_model X_img=np.stack(df['img_path'].to_numpy()) Файл «C:\Users\WPRG\anaconda3\envs\tf\lib\site-packages\numpy\core\shape_base.py», строка 456, в стеке return _nx.concatenate(expanded_arrays, axis=axis, out=out, numpy.core._Exceptions._ArrayMemoryError: невозможно выделить 10,1 ГиБ для массива с формой (1349, 1000, 1000, 1) и типом данных float64
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно выделить 11,6 GIB на массив с формой (1554122468,) и тип данных Int64
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно выделить 11,6 GIB на массив с формой (1554122468,) и тип данных Int64
Anonymous » » в форуме Python - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Node.js Javascript выходит из памяти даже при 64 ГиБ --max-old-space-size
Anonymous » » в форуме Javascript - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-