我正在使用一个自定义的注意力层来添加到我的双向LSTM模型中。
import keras
import keras.backend as K
from keras.models import Model
from keras.layers import Layer, Input, Bidirectional, LSTM, Dense, Attention
class attention(Layer):
def __init__(self,**kwargs):
super(attention,self).__init__(**kwargs)
def build(self,input_shape):
self.W=self.add_weight(name="att_weight",shape=(input_shape[-1],1),initializer="normal")
self.b=self.add_weight(name="att_bias",shape=(input_shape[1],1),initializer="zeros")
super(attention, self).build(input_shape)
def call(self,x):
et=K.squeeze(K.tanh(K.dot(x,self.W)+self.b),axis=-1)
at=K.softmax(et)
at=K.expand_dims(at,axis=-1)
output=x*at
return K.sum(output,axis=1)
def compute_output_shape(self,input_shape):
return (input_shape[0],input_shape[-1])
def get_config(self):
return super(attention,self).get_config()
模型定义为
inputs = Input(shape=(1, len(features)))
att_in = Bidirectional(LSTM(16, return_sequences= True, dropout=0.2))(inputs)
att_out = attention()(att_in)
# l2 = Bidirectional(LSTM(8, return_sequences=True))(att_out)
d1 = Dense(8, activation = 'relu', kernel_initializer='normal')(att_out)
outputs = Dense(1, activation = 'relu', kernel_initializer='normal')(d1)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=keras.optimizers.Adam(0.001),
loss = 'mse',
metrics = ['mse'])
history = model.fit(x_train[:100], y_train[:100], epochs = 1000, batch_size = 5, validation_data=(x_val, y_val), shuffle=False)
执行model.fit
时出错
InternalError: Failed to load in-memory CUBIN: CUDA_ERROR_NO_BINARY_FOR_GPU: no kernel image is available for execution on the device
[[node model/attention/Tanh (defined at tmp/ipykernel_30186/2175341019.py:16) ]] [Op:__inference_train_function_5003]
Function call stack:
train_function
我在NVIDIA GeForce RTX 3090 computeCapability上使用Keras 2.4.3和TensorFlow 2.4.1:8.6与CUDA 12.0
我尝试使用较小的数据集(只有100个数据点)沿着较小的批处理大小(5)来检查内存消耗,但仍然,我看到几乎所有的GPU内存都被利用,然后在训练开始之前生成上述错误。是否有内存泄漏或其他问题我错过了?任何帮助都非常感谢。
更新:如果我在self.call
中将tanh
激活更改为sigmoid
,它就能工作。是什么导致它不能与tanh
激活一起工作是剩下的问题。
1条答案
按热度按时间p8h8hvxi1#
您的系统中带有GPU设置的TensorFlow的构建配置不正确。您需要为
python
版本(3.6 - 3.8)
的TensorFlow version 2.4
安装cuDNN 8.0
和CUDA 11.0
。请查看下面的图片:
**注意:**您也可以尝试将tensorflow升级到最新版本沿着安装所有所需软件的兼容版本,以启用GPU支持。请查看此link作为参考。