将权重从 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]]]])
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]]]])