我具有以下格式的数据:
我通过执行以下操作将这150个字母转换为一键向量:
from skimage.transform import resize
import numpy as np
def transform(data): #transform sequence into one hot encoding
def one_hot_encode(seq):
mapping = dict(zip("ABCDE", range(5)))
seq2 = [mapping[i] for i in seq]
return np.eye(5)[seq2]
train = np.zeros((len(data), 150, 5, 1), dtype=np.uint8)
for idx, d in enumerate(data):
seq = one_hot_encode(d)
seq = resize(seq, (150, 5, 1), mode='constant', preserve_range=True)
train[idx] = seq.astype('float32')
return train
现在,我只想将此数据传递到由Keras构建的简单CNN中。我将模型构建为:
model = Sequential()
model.add(Conv2D(64,kernel_size=(3,3),activation='relu',input_shape=(150,5,1)))
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
现在,我正在尝试通过以下方式进行训练:history = model.fit(X_train, Y_train, epochs=100, verbose=False, validation_split=0.25, batch_size=10)
但这总是引发以下错误:
内部错误:初始化CUDA设备的StreamExecutor失败 顺序0:内部:对cuDevicePrimaryCtxRetain的调用失败: CUDA_ERROR_OUT_OF_MEMORY:内存不足;报告的总内存: 11721506816
我训练了尺寸为512x512x3的图像,它的输入尺寸远远超过此尺寸。那么,为什么会导致此错误?
答案 0 :(得分:1)
显然您的视频卡没有足够的内存来处理输入数据,因此会出现错误。尝试将批次大小减小为4或2,然后再次运行相同的模型。