我可以使用转移学习在不同的数据子集上重新训练神经网络来解决内存问题吗?

时间:2017-11-06 15:48:51

标签: tensorflow neural-network deep-learning keras conv-neural-network

我正在尝试在Amazon Reviews DataSet上训练一个神经网络,以便我可以教它在正面和负面情绪之间正确分类。我尝试使用的方法是首先使用Google的Word2Vec模型对每个评论进行矢量化,方法是从模型中对矢量进行采样。然后,我将它们送入卷积神经网络进行训练。

我从here获得了Google预训练的Word2Vec模型,它给了我一个长度为300维的Vector,并且通过将每个评论截断为80个单词,我为每次评论获得了一个80 x 300的Vector。 / p>

卷积神经网络I训练具有以下结构:

Layer (type)                 Output Shape    

- conv2d_1 (Conv2D)            (None, 1, 300, 128)       

- conv2d_2 (Conv2D)            (None, 1, 300, 64)        

- conv2d_3 (Conv2D)            (None, 1, 300, 32)        

- conv2d_4 (Conv2D)            (None, 1, 300, 16)        

- flatten_1 (Flatten)          (None, 4800)              

- dropout_1 (Dropout 0.5)      (None, 4800)              

- dense_1 (Dense)              (None, 256)               

- batch_normalization_1 (Batch (None, 256)               

- activation_1 (Relu)          (None, 256)               

- dropout_2 (Dropout 0.5)      (None, 256)               

- dense_2 (Dense)              (None, 1)                

我使用大型网络和神经元来减少训练数据的过度拟合。

然而,我的主要问题是我无法训练大部分数据,因为我无法将所有数据加载到内存中,并且由于特征化向量包含大多数高精度小数,因此它们会占用很多内存和磁盘空间,如果我序列化它们。

我是否可以使用转移学习解决不训练足够数据的问题?我计划使用的方法是:

  • 加载可适合内存的数据集子集
  • 使用Google的Word2Vec模型对其进行矢量化(此部分大约需要5-10分钟)
  • 训练模型50-100个纪元
  • 加载数据集的第二个子集并重复。

这是培训大型模型的有效方法吗?因为我在相同的数据集上重新训练模型,所以我假设我不必冻结任何图层吗?

此外,Stochastic Gradient Descent是否是这个问题的一个很好的优化器,因为我将接受大量数据的培训?

1 个答案:

答案 0 :(得分:0)

如果您使用数据生成器,我认为更合适,而不是您提出的方法。