作业

7-1 计算卷积中一共有多少次乘法和加法操作

输入数据形状是

作业 - 图1 ,卷积核 作业 - 图2 ,输出通道数为 作业 - 图3 ,步幅 作业 - 图4 ,填充 作业 - 图5

则完成这样一个卷积,一共需要做多少次乘法和加法操作?

  • 提示

先看输出一个像素点需要做多少次乘法和加法操作,然后再计算总共需要的操作次数。

  • 提交方式

请回复乘法和加法操作的次数,例如:乘法1000,加法1000

7-2 计算网络层的输出数据和参数的形状

网络结构定义如下面的代码所示,输入数据形状是

作业 - 图6

请分别计算每一层的输出数据形状,以及各层包含的参数形状

  1. # 定义 SimpleNet 网络结构
  2. import paddle
  3. import paddle.fluid as fluid
  4. from paddle.fluid.dygraph.nn import Conv2D, Pool2D, Linear
  5. class SimpleNet(fluid.dygraph.Layer):
  6. def __init__(self, name_scope, num_classes=1):
  7. super(SimpleNet, self).__init__(name_scope)
  8. self.conv1 = Conv2D(num_channels=3, num_filters=6, filter_size=5, stride=1, padding=2, act='relu')
  9. self.pool1 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
  10. self.conv2 = Conv2D(num_channels=6, num_filters=16, filter_size=5, stride=1, padding=2, act='relu')
  11. self.pool2 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
  12. self.fc1 = Linear(input_dim=50176, output_dim=64, act='sigmoid')
  13. self.fc2 = Linear(input_dim=64, output_dim=num_classes)
  14. def forward(self, x):
  15. x = self.conv1(x)
  16. x = self.pool1(x)
  17. x = self.conv2(x)
  18. x = self.pool2(x)
  19. x = fluid.layers.reshape(x, [x.shape[0], -1])
  20. x = self.fc1(x)
  21. x = self.fc2(x)
  22. return x
  • 提示,第一层卷积 作业 - 图7 ,各项参数如下:

作业 - 图8

则卷积核权重参数

作业 - 图9 的形状是: 作业 - 图10 ,个数 作业 - 图11

偏置参数

作业 - 图12 的形状是: 作业 - 图13 ,偏置参数的个数是6

输出特征图的大小是:

作业 - 图14

输出特征图的形状是

作业 - 图15

请将下面的表格补充完整:

名称 w形状 w参数个数 b形状 b参数个数 输出形状
conv1 [6,3,5,5] 450 [6] 6 [10, 6, 224, 224]
pool1 [10, 6, 112, 112]
conv2
pool2
fc1
fc2
  • 提交方式:将表格截图发到讨论区