首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用Plaidml在GPU上运行Keras模型

不能使用Plaidml在GPU上运行Keras模型
EN

Stack Overflow用户
提问于 2021-12-05 04:20:00
回答 1查看 237关注 0票数 1

我想在我的GPU上运行这个Keras模型,但是它运行在我的cpu上,我用Plaidml来使用我的

GPU,plaidml是正确设置的,它运行在其他的模型上--我想也许我是在导入tensoflow,但我不确定,我需要在GPU上运行这个模型,我有其他不导入tensorflow的模型,它们与Plaidml很好地工作。

源代码

代码语言:javascript
复制
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上运行,它工作在其他源代码上)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-22 22:24:07

不要使用tensorflow keras,尝试从keras中导入keras。

代码语言:javascript
复制
 import keras
 from keras import layers

您仍然应该可以访问所有相同的层、模型等。您可能需要安装没有使用tensorflow的keras。

代码语言:javascript
复制
 pip install keras

还可以查看您的GPU内存使用情况。它应该跳起来,因为数据存储在上面。在plaidml中,大多数计算实际上不是在GPU上运行,而是将权重和数据存储在GPU上。

另外,可以使用下面的代码块来代替当前的第一行代码。

代码语言:javascript
复制
 import numpy as np
 import plaidml.keras
 import os
 plaidml.keras.install_backend()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70231462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档