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)
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'])
x = F.flatten(self.feature_extractor(x)) # x变为NF的二维 x = x.expand_dims(axis=0) # x新增了一维, xs.append(x) X_ = nd.concat(*xs, dim=0) # X_变为(T,N,F) output, state = self.rnn_layer(X_, state) # 输出也成为TNF output = output.sum( axis=0, keepdims=False) / output.shape[0] # 在时间步求平均,转换为NF Y = self.dense(output) # Y输出(N,num_classes) return Y return LRCN_action_recognition_model(ctx=ctx) net = get_action_recognition_model(ctx=ctx) print(net) loss = gloss.SoftmaxCrossEntropyLoss() optimizer_params = {'learning_rate': 0.01, 'momentum': 0.9, 'wd': 5e-4} # trainer = gluon.Trainer(net.collect_params('LRCN'), 'sgd', optimizer_params) trainer = gluon.Trainer(net.collect_params(), 'sgd', optimizer_params) net.rnn_layer.collect_params().setattr('lr_mult', 10) net.dense.collect_params().setattr('lr_mult', 10) d2l.train(train_iter=train_data, test_iter=val_data, net=net, loss=loss, trainer=trainer, ctx=ctx, num_epochs=num_epochs) net.save_parameters(filename='./LRCN_AR_vgg16.params')