TensorFlow模型重构之二

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/SPESEG/article/details/101032678

上次那个模型重构是简单的修改,那么这次则是针对tflite中不支持的Op来修改的,很多github上的东西都不能落地,这也是其中一个原因,当然我说的落地是放在移动端,不是服务器。很多人的项目都是直接运用tf的操作,根本没有顾虑是否tflite支持这种操作,所以,该博文就针对这种东西,重新改下。当然其中的问题我已经在TensorFlow的github官方提出了issue,可以查看。

补充一:刚看到可以直接用pb放在手机端???这是真的??Java调用pb感觉速度可能会受限很多吧,问题也会不少,不妨试试。但是目前是否可以直接用融入stft的pb来试试呢?慢是肯定的了,处理一帧要一秒。。。。。。。。。。。。。。。疯了。

补充二:暂时先放弃上面的做法,可行性不大。修改网络,将与网络无关的方法全部剔除,改成模型外的方法。网络中不准出现np的库函数。安装librosa时发现这个玩意还依赖soundfile,而安装后者后仍然不能用,发现需要安装库sudo apt-get install libsndfile1安装后可用了。我特么又安装了java,安装方法在此,重拾我三年前学了一两周的java,tflite要java写安卓客户端啊。Idea Java使用方法,用这个写了个Hello World,特么的可以干活了。

补充三:老子讲GRU换成LSTM,发现出错的Op是一样的,也是就是RNN都有可能,而且是很大可能都有这个问题,出错与这个基本相同,老子也已经换了其他函数,比如SimpleRNNCell/BasicRNNCell,估计结果是一样的,而且MultiRNN换成了它的替代者,其实我都是用的替代者,或将升级为的函数。

MultiRNNCell和LSTMCell错误结果如下:

Converting unsupported operation: TensorArrayV3
Op node missing output type attribute: rnn/TensorArray
Converting unsupported operation: TensorArrayV3
Op node missing output type attribute: rnn/TensorArray_1
Converting unsupported operation: TensorArrayScatterV3
Op node missing output type attribute: rnn/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3
Converting unsupported operation: Enter
Converting unsupported operation: LoopCond
Op node missing output type attribute: rnn/while/LoopCond
Unsupported data type in placeholder op: 20
Converting unsupported operation: TensorArrayReadV3
Converting unsupported operation: TensorArrayWriteV3
Op node missing output type attribute: rnn/while/TensorArrayWrite/TensorArrayWriteV3
Converting unsupported operation: Exit
Converting unsupported operation: TensorArraySizeV3
Op node missing output type attribute: rnn/TensorArrayStack/TensorArraySizeV3
Converting unsupported operation: TensorArrayGatherV3
Check failed: batch == 1 (2 vs. 1)

是不是差不多?因此我想,这是RNN的缘故,比如dynamic_rnn换成其他高级点的tf.keras.layers.RNN

补充四:我用的tf2中的函数而dynamic_rnn不是tf2中的,所以在我转pb的时候,用的tf.nn.dynamic_rnn和

from tensorflow.keras.layers import StackedRNNCells,SimpleRNNCell

因而出错了,在转pb的过程中出现错误。我估计GRUCell也一样出错。

from tensorflow.keras.layers import StackedRNNCells,GRUCell

因此我将用tf2的函数重新训练数据。或者完全用keras也是可以的,这个需要看懂Model到底是什么结构。

随时补充及更新,欢迎关注。

另外有相关问题可以加入QQ群讨论,不设微信群

QQ群:868373192 

语音深度学习及信号处理群

猜你喜欢

转载自blog.csdn.net/SPESEG/article/details/101032678