tensorflow遇到的坑
1.tf.norm
norm_pow_2 = tf.pow(tf.norm(from_centralized, axis=[1, 2]), 2) # norm: sqrt(sum(square(tensor)))
norm_pow_2 = tf.reduce_sum(tf.square(from_centralized), axis=[1, 2]) # norm: sqrt(sum(square(tensor)))
以上两个结果一样。
2.No OpKernel was registered to support Op ‘StridedSlice’ with these attrs
No OpKernel was registered to support Op ‘StridedSlice’ with these attrs. Registered devices: [CPU], Registered kernels:
device=‘CPU’; T in [DT_BOOL]
device=‘CPU’; T in [DT_FLOAT]
device=‘CPU’; T in [DT_INT32]
这是因为在移植到android上时,设备不支持64位的运算,这里记录下我遇到的坑:
tf.argmax(output, axis=0) 默认返回 int64 的数据, 所有 tf.argmax(output, axis=0, output_type=tf.int32) 就可以了
3.c#调用tensorflow模型并使用GPU
1).在visual studio解决方案中安装tensorflow Sharp Nuget包。构建解决方案时,可以在项目输出目录中找到名为libtensorflow.dll的文件。如果它不在那里,您可以从包TensorFlowSharp.1.12.0runtime文件夹中检索该文件,并手动复制到您的输出目录。该文件是核心库的主要部分,默认情况下,它只支持CPU。
2).利用python的pip download tensorflow-gpu 命令下载whl包。
3).解压缩您刚刚下载的WHL文件(您可以使用7-zip进行此操作)。找到“_pywrap_tensorflow_internal.pyd”文件,将其重命名为libtensorflow.dll,并将其复制到tensorflow Sharp项目的debug/release文件夹中。或者按下图操作
![v2-0222b6271c835debc0f715c22a71dc91_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=d758b1b1-da2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-0222b6271c835debc0f715c22a71dc91_b.jpg)