emm,将imagenet转换为Tfrecord格式非常复杂,因此我从某个地方下载了经过处理的Tfrecord imagenet。
我使用Pytorch的参数将其应用于tensorflow中的resnet34,但发现准确率仅为55%,太低了。我想原因可能是Pytorch.models和此Tfrecord之间处理imagenet的方法不同。一位好兄弟告诉我Pytorch如何处理数据,但是我仍然需要知道tensorflow如何处理它。
我发现Tfrecord图片的值在-1到1之间,您能告诉我该Tfrecord的处理方法以便我尝试提高准确性吗?
非常感谢!我实在太新了,您的帮助是如此重要
答案 0 :(得分:0)
好的,让我向我伸出我在stackoverflow中的第一个分析器。
处理图像的不同方式会影响准确性,
Pytorch将图片缩放为[0,1],然后使用均值和标准差将它们标准化。
我发现的Tfrecord文件将图片缩放到[0,1],然后通过以下方式将它们缩放到[-1,1]:
image = tf.subtract(image, 0.5)
image = tf.multiply(image, 2.0)
(我认为这是一种奇怪的方式)。
所以我在这两行中添加了注释,并且准确率达到了66%。通过精细调整,得到了72%(但是我不明白当将参数从Pytorch传输到Tensoflow时精度下降)。
PS:在此期间,我发现将模型保存在张量流中时会保存在operator中设置的参数,因此不必担心如何将operator的参数设置为相同。