将权重从 caffe 转移到 tensorflow

Transfer weights from caffe to tensorflew

caffe中的convnet filter shape是[128 64 3 3]或者[out_dim,in_dim,filter_height、filter_weight]。如何将其转换为张量流形状 [filter_height、filter_width、in_dim、out_dim] 或 [3 3 64 128], 以使用 tensorflow 模型获得与使用 caffe 模型相同的结果。

我认为您可以简单地使用 numpy 将数组的大小调整为您希望将其转换为的维度。然后像往常一样将它传递给 tensorflow 计算图。

对于您的情况,您可以使用:

tf_array = caffe_array.reshape([3, 3, 64, 128])

示例:

In [1]: zer = np.array([[[ [1, 2, 2], [3, 4, 4]], [[5, 6, 6], 
                             [7, 8, 8]], [[0, 1, 1], [2, 1, 1] ] ]])

In [2]: zer.shape
Out[2]: (1, 3, 2, 3)

In [3]: zer
Out[3]: 
array([[[[1, 2, 2],
         [3, 4, 4]],

        [[5, 6, 6],
         [7, 8, 8]],

        [[0, 1, 1],
         [2, 1, 1]]]])


In [4]: rez = zer.reshape([3, 2, 3, 1])

In [5]: rez.shape
Out[5]: (3, 2, 3, 1)

In [6]: rez
array([[[[1],
         [2],
         [2]],

        [[3],
         [4],
         [4]]],

       [[[5],
         [6],
         [6]],

        [[7],
         [8],
         [8]]],

       [[[0],
         [1],
         [1]],

        [[2],
         [1],
         [1]]]])