From 30a7f1757bfad79935aa865f4362a7b38e63a415 Mon Sep 17 00:00:00 2001 From: sunyingbin <1850517813@qq.com> Date: Fri, 12 Jun 2020 00:55:51 +0000 Subject: [PATCH] hello-world alexnet dygraph commit-20200612 --- dygraph/alexnet/network.py | 129 +++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 dygraph/alexnet/network.py diff --git a/dygraph/alexnet/network.py b/dygraph/alexnet/network.py new file mode 100644 index 00000000..43b93580 --- /dev/null +++ b/dygraph/alexnet/network.py @@ -0,0 +1,129 @@ +""" +动态图构建 AlexNet +""" +import paddle.fluid as fluid +import numpy as np + +class Conv2D(fluid.dygraph.Layer): + def __init__(self, + name_scope, + num_channels, + num_filters, + filter_size, + stride=1, + padding=0, + dilation=1, + groups=1, + act=None, + use_cudnn=False, + param_attr=None, + bias_attr=None): + + super(Conv2D, self).__init__(name_scope) + + self._conv2d = fluid.dygraph.Conv2D( + num_channels=num_channels, + num_filters=num_filters, + filter_size=filter_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + param_attr=param_attr, + bias_attr=bias_attr, + act=act, + use_cudnn=use_cudnn) + + def forward(self, inputs): + x = self._conv2d(inputs) + return x + +class Conv2DPool(fluid.dygraph.Layer): + def __init__(self, + name_scope, + num_channels, + num_filters, + filter_size, + pool_size, + pool_stride, + pool_padding=0, + pool_type='max', + global_pooling=False, + conv_stride=1, + conv_padding=0, + conv_dilation=1, + conv_groups=1, + act=None, + use_cudnn=False, + param_attr=None, + bias_attr=None): + + super(Conv2DPool, self).__init__(name_scope) + + self._conv2d = fluid.dygraph.Conv2D( + num_channels=num_channels, + num_filters=num_filters, + filter_size=filter_size, + stride=conv_stride, + padding=conv_padding, + dilation=conv_dilation, + groups=conv_groups, + param_attr=param_attr, + bias_attr=bias_attr, + act=act, + use_cudnn=use_cudnn) + + self._pool2d = fluid.dygraph.Pool2D( + pool_size=pool_size, + pool_type=pool_type, + pool_stride=pool_stride, + pool_padding=pool_padding, + global_pooling=global_pooling, + use_cudnn=use_cudnn) + + def forward(self, inputs): + x = self._conv2d(inputs) + x = self._pool2d(x) + return x + +class AlexNet(fluid.dygraph.Layer): + def __init__(self, name_scope, class_dim): + super(AlexNet, self).__init__(name_scope) + + self.conv_pool_1 = Conv2DPool(self.full_name(), 3, 64, 11, 3, 2, conv_stride=4, conv_padding=2, act='relu') + self.conv_pool_2 = Conv2DPool(self.full_name(), 64, 192, 5, 3, 2, conv_stride=1, conv_padding=2, act='relu') + self.conv_3 = Conv2D(self.full_name(), 192, 384, 3, 1, 1, act='relu') + self.conv_4 = Conv2D(self.full_name(), 384, 256, 3, 1, 1, act='relu') + self.conv_pool_5 = Conv2DPool(self.full_name(), 256, 256, 3, 3, 2, conv_stride=1, conv_padding=1, act='relu') + self.fc6 = fluid.dygraph.FC(self.full_name(), 9216, 4096, act='relu') + self.fc7 = fluid.dygraph.FC(self.full_name(), 4096, 4096, act='relu') + self.fc8 = fluid.dygraph.FC(self.full_name(), 4096, class_dim, act='softmax') + + def forward(self, inputs, label=None): + out = self.conv_pool_1(inputs) + out = self.conv_pool_2(out) + out = self.conv_3(out) + out = self.conv_4(out) + out = self.conv_pool_5(out) + out = self.fc6(out) + out = fluid.layers.dropout(out, 0.5) + out = self.fc7(out) + out = fluid.layers.dropout(out, 0.5) + out = self.fc8(out) + + if label is not None: + acc = fluid.layers.accuracy(input=out, label=label) + return out, acc + else: + return out + +if __name__ == '__main__': + with fluid.dygraph.guard(): + alexnet = AlexNet('alex-net', 3) + img = np.zeros([2, 3, 224, 224]).astype('float32') + img = fluid.dygraph.to_variable(img) + outs = alexnet(img).numpy() + + print(outs) + + -- GitLab