我有以下格式的数据:
-
150个字母的序列
-
字母只能是A、B、C、D、E。
-
我总共有20k个序列
-
序列中的10K标记为1,其他10K标记为0
我通过执行以下操作将这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
现在,我只想把这些数据传给一个简单的CNN,它是由Keras建立的。我将模型构建为:
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设备的流执行器失败
序号0:内部:调用CuDevicePrimaryCtxRetain失败:
cuda_error_out_of_memory:内存不足;报告的总内存:
11721506816
我已经训练了512x512x3尺寸的图像,它的输入尺寸远远超过这个。为什么会出现这个错误?