Beispiel #1
0
def train_fine_tuning(net, learning_rate, batch_size=128, num_epochs=5):
    train_iter = gdata.DataLoader(
        train_imgs.trainform_first(train_augs), batch_size, shuffle = True)
    test_iter = gdata.DataLoader(
        test_imgs.transform_first(test_augs), batch_size)
    ctx = d2l.try_all_gpus()
    net.collect_params().resnet_ctx(ctx)
    net.hybridize()
    loss = gloss.SoftmaxCrossEntropyLoss()
    trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': learning_rate,
                                                         'wd': 0.001})
    d2l.train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs)
Beispiel #2
0
def train_fine_tuning(net, learning_rate, batch_size=32, num_epochs=5):
    train_iter = gdata.DataLoader(train_data.transform_first(train_trans),
                                  batch_size,
                                  shuffle=True)
    test_iter = gdata.DataLoader(test_data.transform_first(test_trans),
                                 batch_size)
    ctx = d2l.try_all_gpus()
    net.collect_params().reset_ctx(ctx)
    net.hybridize()
    if os.path.exists('face_cnn.params'):
        print('load params from existing file')
        net.load_parameters('face_cnn.params')
    # lrs = mx.lr_scheduler.FactorScheduler(500, 0.8)
    loss = gloss.L2Loss()
    trainer = gluon.Trainer(net.collect_params(), 'sgd', {
        'learning_rate': learning_rate,
        'wd': 0.001
    })
    train(train_iter, net, loss, trainer, batch_size, num_epochs, ctx)
def train_fine_tuning(datasetName,
                      modelName,
                      learning_rate,
                      net,
                      train_iter,
                      valid_iter,
                      num_epochs,
                      n_retrain_epoch=0):
    import d2lzh as d2l
    ctx = d2l.try_all_gpus()[0]
    net.collect_params().reset_ctx(ctx)
    net.hybridize()
    loss = gloss.SoftmaxCrossEntropyLoss()
    trainer = Trainer(net.collect_params(), 'sgd', {
        'learning_rate': learning_rate,
        'wd': 0.001
    })
    return train(ctx, loss, trainer, datasetName, modelName, net, train_iter,
                 valid_iter, num_epochs, n_retrain_epoch)
Beispiel #4
0
                               self.constant_embedding(inputs),
                               dim=2)
        # 根据Conv1D要求的输入格式,将词向量维,即一维卷积层的通道维,变换到前一维
        embeddings = embeddings.transpose((0, 2, 1))
        # 对于每个一维卷积层,在时序最大池化后会得到一个形状为(批量大小, 通道大小, 1)的
        # NDArray。使用flatten函数去掉最后一维,然后在通道维上连结
        encoding = nd.concat(
            *[nd.flatten(self.pool(conv(embeddings))) for conv in self.convs],
            dim=1)
        # 应用丢弃法后使用全连接层得到输出
        outputs = self.decoder(self.dropout(encoding))
        return outputs


embed_size, kernel_sizes, nums_channels = 100, [3, 4, 5], [100, 100, 100]
ctx = d2l.try_all_gpus()
net = TextCNN(vocab, embed_size, kernel_sizes, nums_channels)
net.initialize(init.Xavier(), ctx=ctx)

glove_embedding = text.embedding.create(
    'glove', pretrained_file_name='glove.6B.100d.txt', vocabulary=vocab)
net.embedding.weight.set_data(glove_embedding.idx_to_vec)
net.constant_embedding.weight.set_data(glove_embedding.idx_to_vec)
net.constant_embedding.collect_params().setattr('grad_req', 'null')

lr, num_epochs = 0.001, 5
trainer = gluon.Trainer(net.collect_params(), 'adam', {'learning_rate': lr})
loss = gloss.SoftmaxCrossEntropyLoss()
d2l.train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs)
d2l.predict_sentiment(net, vocab, ['this', 'movie', 'is', 'so', 'great'])
d2l.predict_sentiment(net, vocab, ['this', 'movie', 'is', 'so', 'bad'])
vocab = d2l.get_vocab_imdb(train_data)
print('分词:')
print('# words in vocab:', len(vocab))
print(train_data[0])
#创建数据迭代器。每次迭代将返回⼀个小批量的数据。
#preprocess_imdb函数对每条评论进⾏分词,并通过词典转换成词索引,然后通过截断或者补 0 来将每条评论⻓度固定成500。
batch_size = 64
train_set = gdata.ArrayDataset(*d2l.preprocess_imdb(train_data, vocab)) 
test_set = gdata.ArrayDataset(*d2l.preprocess_imdb(test_data, vocab))
train_iter = gdata.DataLoader(train_set, batch_size, shuffle=True)
test_iter = gdata.DataLoader(test_set, batch_size)

#构建循环神经网络的模型 
#每个词先通过嵌⼊层得到特征向量。然后,我们使⽤双向循环神经⽹络对特征序列进⼀步编码得到序列信息。最后,我们将编码的序列信息通过全连接层变换为输出
# 创建⼀个含两个隐藏层的双向循环神经⽹络
embed_size, num_hiddens, num_layers, ctx = 100, 100, 2, d2l.try_all_gpus()
net = d2l.BiRNN(vocab, embed_size, num_hiddens, num_layers)
net.initialize(init.Xavier(), ctx=ctx)

#加载预训练的词向量 ⽤这些词向量作为评论中每个词的特征向量
glove_embedding = text.embedding.create('glove', pretrained_file_name='glove.6B.100d.txt', vocabulary=vocab)

#预训练词向量的维度需要跟创建的模型中的嵌⼊层输出⼤小 embed_size ⼀致 在训练中我们不再更新这些词向量
net.embedding.weight.set_data(glove_embedding.idx_to_vec)
net.embedding.collect_params().setattr('grad_req', 'null')

#训练并评价模型
lr, num_epochs = 0.01, 5
trainer = gluon.Trainer(net.collect_params(), 'adam', {'learning_rate': lr})
loss = gloss.SoftmaxCrossEntropyLoss()
d2l.train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs)