Tensorflow在训练resnet时是如何处理Tfrecord格式的ImageNet图像的?
How did Tensorflow process images of ImageNet in Tfrecord format when training resnet?
emm,imagenet转Tfrecord格式比较复杂,所以从某处下载了处理好的Tfrecord imagenet
我用Pytorch的参数应用到tensorflow中的resnet34上,发现准确率只有55%,太低了。我猜原因可能是 Pytorch.models 和这个 Tfrecord 之间处理 imagenet 的方法不同。还有一个好兄弟告诉我Pytorch如何处理数据的方式,但我仍然需要知道tensorflow如何处理它。
我发现Tfrecord图片的取值范围是-1到1,能不能告诉我这个Tfrecord的处理方法,以便我尝试提高精度?
非常感谢!我也是new_flesh,你们的帮助太重要了
好的,让我自己给出我在 Whosebug 中的第一个答案。
处理图像的不同方式会影响准确性,没错。
Pytorch 将图片缩放到 [0,1],然后使用均值和标准差对其进行归一化。
而我找到的 Tfrecord 文件将图片缩放到 [0,1],然后通过以下方式将它们缩放到 [-1, 1]:
image = tf.subtract(image, 0.5)
image = tf.multiply(image, 2.0)
(我认为这是一种奇怪的方式)。
所以我在这两行中添加了注释,得到了 66% 的准确率。通过fine_tune,得到了72%(但我仍然不明白从Pytorch到Tensoflow传递参数时精度下降)。
PS: 这段时间发现在tensorflow中保存模型时operator中设置的参数会被保存,不用担心operator的参数怎么设置一样。
emm,imagenet转Tfrecord格式比较复杂,所以从某处下载了处理好的Tfrecord imagenet
我用Pytorch的参数应用到tensorflow中的resnet34上,发现准确率只有55%,太低了。我猜原因可能是 Pytorch.models 和这个 Tfrecord 之间处理 imagenet 的方法不同。还有一个好兄弟告诉我Pytorch如何处理数据的方式,但我仍然需要知道tensorflow如何处理它。
我发现Tfrecord图片的取值范围是-1到1,能不能告诉我这个Tfrecord的处理方法,以便我尝试提高精度?
非常感谢!我也是new_flesh,你们的帮助太重要了
好的,让我自己给出我在 Whosebug 中的第一个答案。
处理图像的不同方式会影响准确性,没错。
Pytorch 将图片缩放到 [0,1],然后使用均值和标准差对其进行归一化。
而我找到的 Tfrecord 文件将图片缩放到 [0,1],然后通过以下方式将它们缩放到 [-1, 1]:
image = tf.subtract(image, 0.5)
image = tf.multiply(image, 2.0)
(我认为这是一种奇怪的方式)。
所以我在这两行中添加了注释,得到了 66% 的准确率。通过fine_tune,得到了72%(但我仍然不明白从Pytorch到Tensoflow传递参数时精度下降)。
PS: 这段时间发现在tensorflow中保存模型时operator中设置的参数会被保存,不用担心operator的参数怎么设置一样。