#python #machine-learning #keras #plaidml
#питон #машинное обучение #keras #plaidml
Вопрос:
Я хочу запустить эту модель Keras на своем графическом процессоре, но она работает на моем процессоре, Я использовал Plaidml для использования моего графического процессора AMD, plaidml правильно настроен и отлично работает на других моделях, я думаю, может быть, потому что я импортирую tensoflow, но я не уверен в этом, мне нужна модель для работы на графическом процессоре, у меня есть другие модели, которые не импортируют tensorflow, который отлично работает с Plaidml
исходный код
import numpy as np from os import environ environ["KERAS_BACKEND"] = "plaidml.keras.backend" import keras from keras.layers import Dense import numpy as np import pandas as pd from matplotlib import pyplot as plt from tensorflow import keras from tensorflow.keras import layers master_url_root = "https://raw.githubusercontent.com/numenta/NAB/master/data/" df_small_noise_url_suffix = "artificialNoAnomaly/art_daily_small_noise.csv" df_small_noise_url = master_url_root df_small_noise_url_suffix df_small_noise = pd.read_csv( df_small_noise_url, parse_dates=True, index_col="timestamp" ) df_daily_jumpsup_url_suffix = "artificialWithAnomaly/art_daily_jumpsup.csv" df_daily_jumpsup_url = master_url_root df_daily_jumpsup_url_suffix df_daily_jumpsup = pd.read_csv( df_daily_jumpsup_url, parse_dates=True, index_col="timestamp" ) fig, ax = plt.subplots() df_small_noise.plot(legend=False, ax=ax) plt.show() training_mean = df_small_noise.mean() training_std = df_small_noise.std() df_training_value = (df_small_noise - training_mean) / training_std print("Number of training samples:", len(df_training_value)) TIME_STEPS = 288 # Generated training sequences for use in the model. def create_sequences(values, time_steps=TIME_STEPS): output = [] for i in range(len(values) - time_steps 1): output.append(values[i : (i time_steps)]) return np.stack(output) x_train = create_sequences(df_training_value.values) print("Training input shape: ", x_train.shape) model = keras.Sequential( [ layers.Input(shape=(x_train.shape[1], x_train.shape[2])), layers.Conv1D( filters=32, kernel_size=7, padding="same", strides=2, activation="relu" ), layers.Dropout(rate=0.2), layers.Conv1D( filters=16, kernel_size=7, padding="same", strides=2, activation="relu" ), layers.Conv1DTranspose( filters=16, kernel_size=7, padding="same", strides=2, activation="relu" ), layers.Dropout(rate=0.2), layers.Conv1DTranspose( filters=32, kernel_size=7, padding="same", strides=2, activation="relu" ), layers.Conv1DTranspose(filters=1, kernel_size=7, padding="same"), ] ) model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001), loss="mse") model.summary() history = model.fit( x_train, x_train, epochs=50, batch_size=128, validation_split=0.1, callbacks=[ keras.callbacks.EarlyStopping(monitor="val_loss", patience=5, mode="min") ], ) plt.plot(history.history["loss"], label="Training Loss") plt.plot(history.history["val_loss"], label="Validation Loss") plt.legend() plt.show()
Это изображение моего диспетчера задач (Plaidml настроен для работы на GPU 0 [он работает с другими исходными кодами])
Ответ №1:
Вместо использования tensorflow keras попробуйте импортировать keras из keras.
import keras from keras import layers
У вас все равно должен быть доступ ко всем одним и тем же слоям, моделям и т. Д. Возможно, вам потребуется установить keras без использования tensorflow с помощью
pip install keras
Также посмотрите на использование памяти GPU. Он должен подскочить, так как на нем хранятся данные. В plaidml большинство вычислений фактически не выполняются на графическом процессоре, но веса и данные хранятся на нем.
Кроме того, возможно, используйте следующий блок кода вместо ваших текущих первых строк.
import numpy as np import plaidml.keras import os plaidml.keras.install_backend()