У меня есть данные следующего формата:
- Последовательность из 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)
Но это продолжает выдавать следующую ошибку:
InternalError: не удалось инициализировать StreamExecutor для устройства CUDA с порядковым номером 0: Internal: не удалось вызвать cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY: не хватает памяти;Общее количество памяти: 11721506816
Я тренировал изображения с размерами 512x512x3, которые имеют гораздо больше входных размеров, чем этот. Так почему же это вызывает эту ошибку?