Skip to content

Commit 3616d59

Browse files
Remove fluid API (PaddlePaddle#1578)
1 parent c728e77 commit 3616d59

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+741
-1397
lines changed

demo/darts/model.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
from __future__ import print_function
1818

1919
import numpy as np
20-
import paddle.fluid as fluid
20+
import paddle
2121
from paddle.nn.initializer import Constant, KaimingUniform
2222
from paddle.nn import Conv2D
23-
from paddle.fluid.dygraph.nn import Pool2D, BatchNorm, Linear
24-
from paddle.fluid.dygraph.base import to_variable
2523
from genotypes import PRIMITIVES
2624
from genotypes import Genotype
2725
from operations import *
@@ -40,7 +38,7 @@ def __init__(self, c_curr, c_out, kernel_size, padding, stride, name=None):
4038
name=name + "_conv" if name is not None else None,
4139
initializer=KaimingUniform()),
4240
bias_attr=False)
43-
self.bn = BatchNorm(
41+
self.bn = paddle.nn.BatchNorm(
4442
num_channels=c_out,
4543
param_attr=paddle.ParamAttr(
4644
name=name + "_bn_scale" if name is not None else None,
@@ -61,11 +59,11 @@ def forward(self, x):
6159
class Classifier(paddle.nn.Layer):
6260
def __init__(self, input_dim, num_classes, name=None):
6361
super(Classifier, self).__init__()
64-
self.pool2d = Pool2D(pool_type='avg', global_pooling=True)
65-
self.fc = Linear(
66-
input_dim=input_dim,
67-
output_dim=num_classes,
68-
param_attr=paddle.ParamAttr(
62+
self.pool2d = paddle.nn.AdaptiveAvgPool2D(output_size=1)
63+
self.fc = paddle.nn.Linear(
64+
input_dim,
65+
num_classes,
66+
weight_attr=paddle.ParamAttr(
6967
name=name + "_fc_weights" if name is not None else None,
7068
initializer=KaimingUniform()),
7169
bias_attr=paddle.ParamAttr(
@@ -84,7 +82,7 @@ def drop_path(x, drop_prob):
8482
keep_prob = 1. - drop_prob
8583
mask = 1 - np.random.binomial(
8684
1, drop_prob, size=[x.shape[0]]).astype(np.float32)
87-
mask = to_variable(mask)
85+
mask = paddle.to_tensor(mask)
8886
x = paddle.multiply(x / keep_prob, mask)
8987
return x
9088

@@ -150,8 +148,7 @@ def forward(self, s0, s1, drop_prob, training):
150148
class AuxiliaryHeadCIFAR(paddle.nn.Layer):
151149
def __init__(self, C, num_classes):
152150
super(AuxiliaryHeadCIFAR, self).__init__()
153-
self.avgpool = Pool2D(
154-
pool_size=5, pool_stride=3, pool_padding=0, pool_type='avg')
151+
self.avgpool = paddle.nn.AvgPool2D(5, stride=3, padding=0)
155152
self.conv_bn1 = ConvBN(
156153
c_curr=C,
157154
c_out=128,
@@ -228,8 +225,7 @@ def forward(self, input, drop_path_prob, training):
228225
class AuxiliaryHeadImageNet(paddle.nn.Layer):
229226
def __init__(self, C, num_classes):
230227
super(AuxiliaryHeadImageNet, self).__init__()
231-
self.avgpool = Pool2D(
232-
pool_size=5, pool_stride=2, pool_padding=0, pool_type='avg')
228+
self.avgpool = paddle.nn.AvgPool2D(5, stride=2, padding=0)
233229
self.conv_bn1 = ConvBN(
234230
c_curr=C,
235231
c_out=128,

demo/darts/model_search.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
from __future__ import print_function
1818

1919
import paddle
20-
import paddle.fluid as fluid
2120
from paddle.nn.initializer import Normal, KaimingUniform, Constant
2221
from paddle.nn import Conv2D, Pool2D, BatchNorm, Linear
23-
from paddle.fluid.dygraph.base import to_variable
2422
from genotypes import PRIMITIVES
2523
from operations import *
2624
import paddleslim
@@ -159,9 +157,9 @@ def __init__(self,
159157
self.cells = paddle.nn.LayerList(cells)
160158
self.global_pooling = Pool2D(pool_type='avg', global_pooling=True)
161159
self.classifier = Linear(
162-
input_dim=c_prev,
163-
output_dim=num_classes,
164-
param_attr=paddle.ParamAttr(initializer=KaimingUniform()),
160+
c_prev,
161+
num_classes,
162+
weight_attr=paddle.ParamAttr(initializer=KaimingUniform()),
165163
bias_attr=paddle.ParamAttr(initializer=KaimingUniform()))
166164

167165
self._initialize_alphas()

demo/darts/operations.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,25 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import paddle.fluid as fluid
15+
import paddle
1616
from paddle.nn import Conv2D
17-
from paddle.fluid.dygraph.nn import Pool2D, BatchNorm
17+
from paddle.nn import BatchNorm
1818
from paddle.nn.initializer import Constant, KaimingUniform
1919

2020

2121
OPS = {
2222
'none':
2323
lambda C, stride, affine: Zero(stride),
2424
'avg_pool_3x3':
25-
lambda C, stride, affine: Pool2D(
26-
pool_size=3,
27-
pool_type="avg",
28-
pool_stride=stride,
29-
pool_padding=1),
25+
lambda C, stride, affine: paddle.nn.AvgPool2D(
26+
3,
27+
stride=stride,
28+
padding=1),
3029
'max_pool_3x3':
31-
lambda C, stride, affine: Pool2D(
32-
pool_size=3,
33-
pool_type="max",
34-
pool_stride=stride,
35-
pool_padding=1),
30+
lambda C, stride, affine: paddle.nn.MaxPool2D(
31+
3,
32+
stride=stride,
33+
padding=1),
3634
'skip_connect':
3735
lambda C, stride, affine: Identity()
3836
if stride == 1 else FactorizedReduce(C, C, affine),
@@ -67,7 +65,7 @@ class Zero(paddle.nn.Layer):
6765
def __init__(self, stride):
6866
super(Zero, self).__init__()
6967
self.stride = stride
70-
self.pool = Pool2D(pool_size=1, pool_stride=2)
68+
self.pool = paddle.nn.MaxPool2D(1, stride=2)
7169

7270
def forward(self, x):
7371
pooled = self.pool(x)

demo/darts/search.py

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import argparse
2323
import functools
2424

25-
import paddle.fluid as fluid
26-
from paddle.fluid.dygraph.base import to_variable
2725
import reader
2826
from model_search import Network
2927
from paddleslim.nas.darts import DARTSearch
@@ -72,26 +70,25 @@ def main(args):
7270
is_shuffle=True,
7371
args=args)
7472

75-
with fluid.dygraph.guard(place):
76-
model = Network(args.init_channels, args.class_num, args.layers,
77-
args.method)
78-
searcher = DARTSearch(
79-
model,
80-
train_reader,
81-
valid_reader,
82-
place,
83-
learning_rate=args.learning_rate,
84-
batchsize=args.batch_size,
85-
num_imgs=args.trainset_num,
86-
arch_learning_rate=args.arch_learning_rate,
87-
unrolled=args.unrolled,
88-
num_epochs=args.epochs,
89-
epochs_no_archopt=args.epochs_no_archopt,
90-
use_multiprocess=args.use_multiprocess,
91-
use_data_parallel=args.use_data_parallel,
92-
save_dir=args.model_save_dir,
93-
log_freq=args.log_freq)
94-
searcher.train()
73+
model = Network(args.init_channels, args.class_num, args.layers,
74+
args.method)
75+
searcher = DARTSearch(
76+
model,
77+
train_reader,
78+
valid_reader,
79+
place,
80+
learning_rate=args.learning_rate,
81+
batchsize=args.batch_size,
82+
num_imgs=args.trainset_num,
83+
arch_learning_rate=args.arch_learning_rate,
84+
unrolled=args.unrolled,
85+
num_epochs=args.epochs,
86+
epochs_no_archopt=args.epochs_no_archopt,
87+
use_multiprocess=args.use_multiprocess,
88+
use_data_parallel=args.use_data_parallel,
89+
save_dir=args.model_save_dir,
90+
log_freq=args.log_freq)
91+
searcher.train()
9592

9693

9794
if __name__ == '__main__':

demo/darts/train.py

Lines changed: 74 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import argparse
2424
import functools
2525

26+
import paddle
2627
import paddle.fluid as fluid
27-
from paddle.fluid.dygraph.base import to_variable
2828
from paddleslim.common import AvgrageMeter, get_logger
2929
from paddleslim.nas.darts import count_parameters_in_MB
3030

@@ -72,8 +72,8 @@ def train(model, train_reader, optimizer, epoch, drop_path_prob, args):
7272

7373
for step_id, data in enumerate(train_reader()):
7474
image_np, label_np = data
75-
image = to_variable(image_np)
76-
label = to_variable(label_np)
75+
image = paddle.to_tensor(image_np)
76+
label = paddle.to_tensor(label_np)
7777
label.stop_gradient = True
7878
logits, logits_aux = model(image, drop_path_prob, True)
7979

@@ -117,8 +117,8 @@ def valid(model, valid_reader, epoch, args):
117117

118118
for step_id, data in enumerate(valid_reader()):
119119
image_np, label_np = data
120-
image = to_variable(image_np)
121-
label = to_variable(label_np)
120+
image = paddle.to_tensor(image_np)
121+
label = paddle.to_tensor(label_np)
122122
logits, _ = model(image, 0, False)
123123
prec1 = paddle.static.accuracy(input=logits, label=label, k=1)
124124
prec5 = paddle.static.accuracy(input=logits, label=label, k=5)
@@ -140,83 +140,75 @@ def main(args):
140140
place = paddle.CUDAPlace(paddle.distributed.parallel.ParallelEnv().dev_id) \
141141
if args.use_data_parallel else paddle.CUDAPlace(0)
142142

143-
with fluid.dygraph.guard(place):
144-
genotype = eval("genotypes.%s" % args.arch)
145-
model = Network(
146-
C=args.init_channels,
147-
num_classes=args.class_num,
148-
layers=args.layers,
149-
auxiliary=args.auxiliary,
150-
genotype=genotype)
151-
152-
logger.info("param size = {:.6f}MB".format(
153-
count_parameters_in_MB(model.parameters())))
154-
155-
device_num = paddle.distributed.parallel.ParallelEnv().nranks
156-
step_per_epoch = int(args.trainset_num / (args.batch_size * device_num))
157-
learning_rate = fluid.dygraph.CosineDecay(args.learning_rate,
158-
step_per_epoch, args.epochs)
159-
clip = fluid.clip.GradientClipByGlobalNorm(clip_norm=args.grad_clip)
160-
optimizer = paddle.optimizer.Momentum(
161-
learning_rate,
162-
momentum=args.momentum,
163-
regularization=fluid.regularizer.L2Decay(args.weight_decay),
164-
parameter_list=model.parameters(),
165-
grad_clip=clip)
166-
167-
if args.use_data_parallel:
168-
strategy = fluid.dygraph.parallel.prepare_context()
169-
model = fluid.dygraph.parallel.DataParallel(model, strategy)
170-
171-
train_loader = fluid.io.DataLoader.from_generator(
172-
capacity=64,
173-
use_double_buffer=True,
174-
iterable=True,
175-
return_list=True,
176-
use_multiprocess=args.use_multiprocess)
177-
valid_loader = fluid.io.DataLoader.from_generator(
178-
capacity=64,
179-
use_double_buffer=True,
180-
iterable=True,
181-
return_list=True,
182-
use_multiprocess=args.use_multiprocess)
183-
184-
train_reader = reader.train_valid(
185-
batch_size=args.batch_size,
186-
is_train=True,
187-
is_shuffle=True,
188-
args=args)
189-
valid_reader = reader.train_valid(
190-
batch_size=args.batch_size,
191-
is_train=False,
192-
is_shuffle=False,
193-
args=args)
194-
if args.use_data_parallel:
195-
train_reader = fluid.contrib.reader.distributed_batch_reader(
196-
train_reader)
197-
198-
train_loader.set_batch_generator(train_reader, places=place)
199-
valid_loader.set_batch_generator(valid_reader, places=place)
200-
201-
save_parameters = (not args.use_data_parallel) or (
202-
args.use_data_parallel and
203-
paddle.distributed.parallel.ParallelEnv().local_rank == 0)
204-
best_acc = 0
205-
for epoch in range(args.epochs):
206-
drop_path_prob = args.drop_path_prob * epoch / args.epochs
207-
logger.info('Epoch {}, lr {:.6f}'.format(
208-
epoch, optimizer.current_step_lr()))
209-
train_top1 = train(model, train_loader, optimizer, epoch,
210-
drop_path_prob, args)
211-
logger.info("Epoch {}, train_acc {:.6f}".format(epoch, train_top1))
212-
valid_top1 = valid(model, valid_loader, epoch, args)
213-
if valid_top1 > best_acc:
214-
best_acc = valid_top1
215-
if save_parameters:
216-
paddle.save(model.state_dict(),
217-
args.model_save_dir + "/best_model")
218-
logger.info("Epoch {}, valid_acc {:.6f}, best_valid_acc {:.6f}".
219-
format(epoch, valid_top1, best_acc))
143+
genotype = eval("genotypes.%s" % args.arch)
144+
model = Network(
145+
C=args.init_channels,
146+
num_classes=args.class_num,
147+
layers=args.layers,
148+
auxiliary=args.auxiliary,
149+
genotype=genotype)
150+
151+
logger.info("param size = {:.6f}MB".format(
152+
count_parameters_in_MB(model.parameters())))
153+
154+
device_num = paddle.distributed.parallel.ParallelEnv().nranks
155+
learning_rate = paddle.optimizer.lr.CosineAnnealingDecay(args.learning_rate,
156+
args.epochs / 2)
157+
clip = paddle.nn.ClipGradByGlobalNorm(args.grad_clip)
158+
optimizer = paddle.optimizer.Momentum(
159+
learning_rate,
160+
momentum=args.momentum,
161+
regularization=paddle.regularizer.L2Decay(args.weight_decay),
162+
parameter_list=model.parameters(),
163+
grad_clip=clip)
164+
165+
if args.use_data_parallel:
166+
strategy = paddle.distributed.init_parallel_env()
167+
model = paddle.DataParallel(model, strategy)
168+
169+
train_loader = paddle.io.DataLoader.from_generator(
170+
capacity=64,
171+
use_double_buffer=True,
172+
iterable=True,
173+
return_list=True,
174+
use_multiprocess=args.use_multiprocess)
175+
valid_loader = paddle.io.DataLoader.from_generator(
176+
capacity=64,
177+
use_double_buffer=True,
178+
iterable=True,
179+
return_list=True,
180+
use_multiprocess=args.use_multiprocess)
181+
182+
train_reader = reader.train_valid(
183+
batch_size=args.batch_size, is_train=True, is_shuffle=True, args=args)
184+
valid_reader = reader.train_valid(
185+
batch_size=args.batch_size, is_train=False, is_shuffle=False, args=args)
186+
if args.use_data_parallel:
187+
train_reader = fluid.contrib.reader.distributed_batch_reader(
188+
train_reader)
189+
190+
train_loader.set_batch_generator(train_reader, places=place)
191+
valid_loader.set_batch_generator(valid_reader, places=place)
192+
193+
save_parameters = (not args.use_data_parallel) or (
194+
args.use_data_parallel and
195+
paddle.distributed.parallel.ParallelEnv().local_rank == 0)
196+
best_acc = 0
197+
for epoch in range(args.epochs):
198+
drop_path_prob = args.drop_path_prob * epoch / args.epochs
199+
logger.info('Epoch {}, lr {:.6f}'.format(epoch,
200+
optimizer.current_step_lr()))
201+
train_top1 = train(model, train_loader, optimizer, epoch,
202+
drop_path_prob, args)
203+
logger.info("Epoch {}, train_acc {:.6f}".format(epoch, train_top1))
204+
valid_top1 = valid(model, valid_loader, epoch, args)
205+
if valid_top1 > best_acc:
206+
best_acc = valid_top1
207+
if save_parameters:
208+
paddle.save(model.state_dict(),
209+
args.model_save_dir + "/best_model")
210+
logger.info("Epoch {}, valid_acc {:.6f}, best_valid_acc {:.6f}".format(
211+
epoch, valid_top1, best_acc))
220212

221213

222214
if __name__ == '__main__':

0 commit comments

Comments
 (0)