作者回复: 你好,autiplex。谢谢你的留言。 fc_out_features 是原来googlenet最后一层(fc层)的输出,10是我们期望的输出,现在是要将fc_out_features(1000)替换成10。 因此,googlenet.fc = torch.nn.Linear(fc_in_features, 10),这里表示最后一层的输出改为10。 torch.nn.Linear的参数是:(网络输入特征数,网络输出特征数),所以第一个参数应该是fc_in_features。
作者回复: 你好,AstrHan。感谢你的留言。 首先,不使用预训练模型的话,我们的模型是从随机初始化的参数开始训练。这个训练过程会非常慢。 使用预训练模型话,相当于在预训练模型的基础上进行训练。 举个例子,把模型训练比作从山顶走向山脚的过程,山脚就是我们模型收敛的状态。 不使用预训练模型的话,就相当于从山顶开始一步步向下走。 使用预训练模型的话,相当于从一个接近山脚的位置向下走。 有两种微调方式。第一种就是这节课中提到的微调,也就是固定卷积层的参数,只训练全连接层。 这也可以理解为Embedding。ImageNet上有很多丰富的数据,现在有一个在ImageNet上训练很好的模型,然后将我们例子中的图片(狗)用ImageNet上训练的模型进行特征提取(ImageNet模型倒数第二层的输出)。 提取后的数据相当于是原始图片(狗)的另一种表示。 这个过程相当于,原始的数据就是狗的图片。 经过ImageNet提取后的特征变为有有耳朵、四条腿、爱吃骨头、跑得快、会汪汪叫之类的特征。 然后用提取后的特征作为新模型的输入,这里的新模型就是修改后的全连接层。 还有一种微调,会在14节中讲到,就是使用在ImageNet上训练好的模型的参数,作为我们模型的初始化参数进行训练。这种方式是训练所有的参数,而不是固定全连接层前面的参数。
作者回复: 你好,谢谢留言。每次都非常正确👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻。^^
作者回复: 你好,感谢你的留言。 B是指batch_size,就是一次处理多少张图片。 C是指channel,图片的通道数,通常来说是3。 H和W就是只图片的高与宽了。
作者回复: 你好,徐洲更。 可以学习一下强化学习(Reinforcement Learning)相关的内容。^^
作者回复: 你好,感谢留言。 iter()函数用来生成迭代器。 next()函数用来获取迭代器的元素。 具体可以参见Python迭代器的创建和使用。 https://www.w3school.com.cn/python/ref_func_iter.asp
作者回复: 👍🏻👍🏻👍🏻^^
作者回复: hello。print(googlenet.fc.out_features)试试呢? fc_out_features变量并没有赋新值,所以不会改变呀
作者回复: 你好,clee。谢谢你的留言。 👍🏻👍🏻👍🏻👍🏻,完全正确^^。
作者回复: 你好,夏阳,感谢你的留言。能新开一个留言提供一下你的代码吗?或者在发到微信群里。