Agora, a questão é como lidar com tamanhos de imagem tão grandes, onde não há privilégios de reduzir a amostragem
Suponho que, ao reduzir a amostragem, você queira reduzir a entrada antes de passá-la para a CNN. A camada convolucional permite reduzir a amostra da imagem em uma rede, escolhendo um passo amplo, o que economiza recursos para as próximas camadas. De fato, é isso que tem que fazer, caso contrário, seu modelo não se encaixará na GPU.
1) Existem técnicas para lidar com imagens tão grandes que devem ser treinadas?
Geralmente, as pesquisas dimensionam as imagens para um tamanho razoável. Mas se isso não for uma opção para você, você precisará restringir sua CNN. Além de reduzir a amostragem nas camadas iniciais, eu recomendaria que você se livrasse da camada FC (que normalmente usa a maioria dos parâmetros) em favor da camada convolucional . Além disso, você precisará transmitir seus dados em cada época, porque eles não se encaixam na sua GPU.
Observe que nada disso impedirá uma carga computacional pesada nas camadas iniciais, exatamente porque a entrada é muito grande: a convolução é uma operação cara e as primeiras camadas executam muitas delas em cada passagem para frente e para trás. Em resumo, o treinamento será lento.
2) Qual tamanho de lote é razoável de usar?
Aqui está outro problema. Uma única imagem leva 2400x2400x3x4
(3 canais e 4 bytes por pixel) que é ~ 70Mb, então você dificilmente pode comprar um tamanho de lote 10. Mais realista seria 5. 5. Observe que a maior parte da memória será obtida pelos parâmetros da CNN. Acho que, nesse caso, faz sentido reduzir o tamanho usando valores de 16 bits em vez de 32 bits - dessa forma, você poderá dobrar os lotes.
3) Existem precauções a serem tomadas ou qualquer aumento e diminuição nos recursos de hardware que eu possa fazer?
Seu gargalo é a memória da GPU. Se você puder comprar outra GPU, obtenha-a e divida a rede entre elas. Tudo o resto é insignificante em comparação com a memória da GPU.
Geralmente, para imagens, o conjunto de recursos são os valores de densidade de pixels e, nesse caso, levará a um conjunto de recursos bastante grande; Além disso, a amostragem das imagens também não é recomendada, pois você pode perder (na verdade) perderá dados importantes.
[1] Mas existem algumas técnicas que podem ajudá-lo a reduzir o tamanho do conjunto de recursos, abordagens como PCA (Principle Component Analysis) ajudam na seleção de subconjuntos de recursos importantes.
Para informações detalhadas, consulte o link http://spark.apache.org/docs/latest/ml-features.html#pca .
[2] Além disso, para reduzir as despesas computacionais durante o treinamento de sua rede neural, você pode usar a descida estocástica de gradiente, em vez do uso convencional da abordagem de descida de gradiente, que reduziria o tamanho do conjunto de dados necessário para o treinamento em cada iteração. Assim, o tamanho do seu conjunto de dados a ser usado em uma iteração reduziria, reduzindo o tempo necessário para treinar a rede.
O tamanho exato do lote a ser usado depende da sua distribuição para o conjunto de dados de treinamento e teste do conjunto de dados; um uso mais geral é 70-30. Onde você também pode usar a abordagem estocástica acima mencionada para reduzir o tempo necessário.
Detalhe para descida estocástica de gradiente http://scikit-learn.org/stable/modules/sgd.html
[3] O hardware parece adequado para a atualização seria necessária; ainda assim, se necessário, procure soluções em nuvem como a AWS, onde você pode obter uma conta gratuita até um limite de uso.
fonte
Dados tão grandes não podem ser carregados na sua memória. Vamos dividir o que você pode fazer em dois:
fonte