深度學習框架 TensorFlow.NET 0.3.0,新增圖片識別示例
TensorFlow是一個深度學習框架,支援Linux平臺,Windows平臺,Mac平臺,甚至手機移動裝置等各種平臺。TensorFlow提供了非常豐富的深度學習相關的API,可以說目前所有深度學習框架裡,提供的API最全的,包括基本的向量矩陣計算、各種優化演算法、各種卷積神經網路和迴圈神經網路基本單元的實現、以及視覺化的輔助工具、等等。
基於TensorFlow的API是可以做其它語言繫結的,目前只有Python語言繫結是谷歌公司官方推薦和支援的,實現的功能也是最權威最完整的。除了對Python的大力支援外,其它語言的繫結就顯得非常弱小,幾乎不能用。TensorFlow.NET是用C#語言對TensorFlow API進行繫結,並最大化保持Python的介面使用習慣,讓其它模型程式碼能快速的遷移到.NET。
v0.3.0主要是新增了一個影象識別的示例程式和修復一些Bug。具體程式碼可以參考TensorFlowNET.Examples的LabelImage的樣例 。
private NDArray ReadTensorFromImageFile(string file_name, int input_height = 299, int input_width = 299, int input_mean = 0, int input_std = 255) { return with<Graph, NDArray>(tf.Graph().as_default(), graph => { var file_reader = tf.read_file(file_name, "file_reader"); var image_reader = tf.image.decode_jpeg(file_reader, channels: 3, name: "jpeg_reader"); var caster = tf.cast(image_reader, tf.float32); var dims_expander = tf.expand_dims(caster, 0); var resize = tf.constant(new int[] { input_height, input_width }); var bilinear = tf.image.resize_bilinear(dims_expander, resize); var sub = tf.subtract(bilinear, new float[] { input_mean }); var normalized = tf.divide(sub, new float[] { input_std }); return with<Session, NDArray>(tf.Session(graph), sess => sess.run(normalized)); }); }
2/18/2019 2:49:18 AM Starting LabelImage label_image_data\inception_v3_2016_08_28_frozen.pb.tar.gz already exists. label_image_data\grace_hopper.jpg already exists. 2019-02-18 20:49:19.499758: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 create_op: Const 'file_reader/filename', inputs: empty, control_inputs: empty, outputs: file_reader/filename:0 create_op: ReadFile 'file_reader', inputs: file_reader/filename:0, control_inputs: empty, outputs: file_reader:0 create_op: DecodeJpeg 'jpeg_reader', inputs: file_reader:0, control_inputs: empty, outputs: jpeg_reader:0 create_op: Cast 'Cast/Cast', inputs: jpeg_reader:0, control_inputs: empty, outputs: Cast/Cast:0 create_op: Const 'ExpandDims/dim', inputs: empty, control_inputs: empty, outputs: ExpandDims/dim:0 create_op: ExpandDims 'ExpandDims', inputs: Cast/Cast:0, ExpandDims/dim:0, control_inputs: empty, outputs: ExpandDims:0 create_op: Const 'Const', inputs: empty, control_inputs: empty, outputs: Const:0 create_op: ResizeBilinear 'ResizeBilinear', inputs: ExpandDims:0, Const:0, control_inputs: empty, outputs: ResizeBilinear:0 create_op: Const 'y', inputs: empty, control_inputs: empty, outputs: y:0 create_op: Sub 'Sub', inputs: ResizeBilinear:0, y:0, control_inputs: empty, outputs: Sub:0 create_op: Const 'y_1', inputs: empty, control_inputs: empty, outputs: y_1:0 create_op: RealDiv 'truediv', inputs: Sub:0, y_1:0, control_inputs: empty, outputs: truediv:0 grace_hopper.jpg: 653 military uniform, 0.8343058 grace_hopper.jpg: 668 mortarboard, 0.02186947 grace_hopper.jpg: 401 academic gown, 0.01035806 grace_hopper.jpg: 716 pickelhaube, 0.008008132 grace_hopper.jpg: 466 bulletproof vest, 0.005350832 2/19/2019 2:49:26 AM Completed LabelImage
文件地址:Document
倉庫地址:Github
聊天室:Gitter
軟體下載地址:NuGet