В обычной классификации изображений с использованием cnn's? какой должна быть величина единиц в плотном слое? - PullRequest
0 голосов
/ 29 апреля 2020

Я просто создаю нормальный классификатор изображений для бумажных ножниц. Я использую сам локальный графический процессор, и он не является высокопроизводительным графическим процессором. Когда я начал тренировать модель, она продолжала выдавать ошибку:

ResourceExhaustedError:  OOM when allocating tensor with shape.

Я погуглил эту ошибку, и мне предложили уменьшить размер партии, что я и сделал. Это все еще ничего не решало, однако позже я изменил размер изображения на 50 * 50, сначала это было 200 * 200, а затем он начал тренироваться с точностью до 99%. Позже я хотел посмотреть, смогу ли я сделать это с изображениями размером 150 * 150, так как я нашел учебник на официальном канале тензорного потока на YouTube, следовал их точному коду, но он все еще не работал. Я уменьшил размер партии, но решения пока нет. Позже я изменил нет. единиц в плотном слое изначально было 512, а затем я уменьшил его до 200, и он работал нормально, но теперь точность довольно tra sh. Мне просто интересно, могу ли я в любом случае настроить свою модель в соответствии с моим GPU, не влияя на мою точность? Так что мне просто интересно, как же нет. единиц в плотном слое материи? Это действительно очень помогло бы мне.

    i=Input(shape=X_train[0].shape)
    x=Conv2D(64,(3,3),padding='same',activation='relu')(i)
    x=BatchNormalization()(x)
    x=Conv2D(64,(3,3),padding='same',activation='relu')(x)
    x=BatchNormalization()(x)
    x=MaxPool2D((2,2))(x)
    x=Conv2D(128,(3,3),padding='same',activation='relu')(x)
    x=BatchNormalization()(x)
    x=Conv2D(128,(3,3),padding='same',activation='relu')(x)
    x=BatchNormalization()(x)
    x=MaxPool2D((2,2))(x)
    x=Flatten()(x)
    x=Dropout(0.2)(x)
    x=Dense(512,activation='relu')(x)
    x=Dropout(0.2)(x)
    x=Dense(3,activation='softmax')(x)
    model=Model(i,x)

хорошо, теперь, когда я запускаю это с размером изображения 150 * 150, он выдает эту ошибку, если я изменю размер изображения на 50 * 50 и уменьшу размер пакета до 8 это работает и дает мне точность 99. но если я использую 150 * 150 и уменьшить нет. единиц в плотном слое до 200 (случайных) это работает нормально, но точность очень и очень плохая. Я использую низкоуровневую NVIDIA GeForce MX 230 GPU. А у меня врам 4 гигабайта

1 Ответ

2 голосов
/ 29 апреля 2020

Для изображений 200x200 выход последнего MaxPool имеет форму (50,50,128), которая затем сглаживается и служит входом плотного слоя, давая вам в общей сложности 50 * 50 * 128 * 512 = 163840000 параметров. Это много.

Чтобы уменьшить количество параметров, вы можете выполнить одно из следующих действий: - уменьшить количество фильтров в последнем слое Conv2D - сделать MaxPool более 2x2 - уменьшить размер Плотный слой - уменьшить размер входного изображения.

Вы уже попробовали два последних варианта. Вы только методом проб и ошибок узнаете, какой метод в конечном итоге даст вам наилучшую точность. Вы уже на 99%, и это хорошо.

Если вам нужна платформа с большим количеством VRAM, вы можете использовать Google Colab https://colab.research.google.com/

...