Python神经网络1之TensorFlow

人工智能80

Python神经网络1之TensorFlow

深度学习介绍

深度学习与机器学习的区别

特征提取方面

Python神经网络1之TensorFlow

  1. 机器学习的特征工程步骤是要靠手动完成的,需要大量领域的专业知识
  2. 深度学习通常用多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型,通过训练大量数据自动得出模型,不需要人工特征提取环节

; 数据量和计算性能方面要求

Python神经网络1之TensorFlow

  1. 深度学习需要大量的训练数据集
  2. 训练深度神经网络需要大量的算力

算法代表

  1. 机器学习 -朴素贝叶斯、决策树
  2. 深度学习 -神经网络

深度学习框架介绍

框架名主语言从语言灵活性上手难易开发者TensorflowC++cuda/python好难GooglePyTorchpythonC/C++好中等FaceBookCaffeeC++cuda/python/Matlab一般中等贾杨清MXNetc++cyda/R/julia好中等李沐和陈天奇等Torchluac/cuda好中等FaceBookTheanopythonC++/cuda好易蒙特利尔理工学院

总结:

  1. 最常用的框架当数TensorFlow和Pytorch,而Caffee和Caffee2次之
  2. PyTorch和Torch更适用于学术研究,TensorFlow,Caffee,Caffee2更适用于工业界的生产环境部署
  3. Caffee适用于处理静态图像,Torch和PyTorch更适用于动态图像,TensorFlow在两种情况下都很实用
  4. TensorFlow和Caffee2可在移动端实用

TensorFlow的安装

  1. CPU与GPU的对比
    CPU:核芯的数量更少,但是每一个核芯的速度更快,性能更强,更适用于处理连续性的任务
    GPU:核芯的数量更多,但是每一个核芯的处理速度较慢,更适用于并行任务
  2. CPU版本
    macOS安装

pip install tensorflow==1.8 -i https://mirrors.aliyun.com/pypi/simple

TensorFlow框架介绍

TensorFlow结构分析

TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段
在构建阶段,数据与操作的执行步骤被描述成一个图
在执行阶段,使用会话知心构建好的图中的操作

  • 构建图----类似流程图,定义数据和操作
  • 执行图----调用各方资源,将定义好的数据和操作运行起来

图和会话:

  1. 图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法
  2. 会话:TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
  3. 张量:TensorFlow中的基本数据对象
  4. 节点:提供图当中执行的操作
    TensorFlow是一个采用数据流图,用于数值计算的开源框架
    节点在图中表示数学操作,线则表示在节点间相互联系的多维数据数组,即张量

案例加法展示

pycharm上主流是2.x版本的,添加
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
这两行代码将2.x版本变成1.x版本来学习

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

def tensorflow_demo01():

    a=tf.constant(2);
    b=tf.constant(3);
    c=a+b;
    print(c)

    with tf.Session() as sess:
        c_t=sess.run(c)
        print("c_value:",c_t)

    return None;

if __name__=='__main__':
    tensorflow_demo01();

Python神经网络1之TensorFlow

图与TensorBoard

简单来说,图结构 就是 图数据+操作

图相关操作

默认图

通常TensorFlow会默认帮我们创建一张图
查看默认图的两种方法:

  1. 调用tf.get_default_graph()访问,
  2. op,sess,都含有graph属性,默认都在一张图中Python神经网络1之TensorFlow
def graph_tensorflow_demo02():
    a=tf.constant(2)
    b=tf.constant(3)
    c=a+b
    print("c:",c)

    g_graph=tf.get_default_graph()
    print("g的图属性:",g_graph)

    with tf.Session() as sess:
        c_t=sess.run(c)
        print("c_t:",c_t)

        print("session的图属性:",sess.graph)
        print("a_g:",a.graph)
        print("b_g:",b.graph)

    return None;

Python神经网络1之TensorFlow

创建图

  • 通过tf.Graph()自定义创建图
  • 如果要在这张图中创建OP,典型用法就是使用tf.Graph.as_default()上下文管理器

不能在自定义图中运行数据和操作

def diy_graph_tensorflow_demo03():

    new_Graph=tf.Graph()

    a=tf.constant(20)
    b=tf.constant(30)
    c=a+b

    with new_Graph.as_default():
        a_new=tf.constant(20)
        b_new=tf.constant(30)
        c_new=a_new+b_new;
        print("c_new:\n",c_new)
        print("a_graph:\n",a_new.graph)
        print("b_graph:\n",b_new.graph)

    with tf.Session() as sess:
        c_value=sess.run(c)
        print("c_value:\n",c_value)

    with tf.Session(graph=new_Graph) as new_sess:
        c_new_value=new_sess.run(c_new)
        print("c_new_value:\n",c_new_value)

    return None;

Python神经网络1之TensorFlow

TensorBoard:可视化学习

实现程序可视化过程:

  1. 数据序列化-events文件
    tf.summary.FileWriter(path,graph=sess.graph)
  2. 启动TensorBoard
    tensorboard --logdir=path
def demo03():
    a=tf.constant(10)
    b=tf.constant(20)
    print("a\n", a)
    print("b\n", b)
    c=a+b

    with tf.Session() as sess:
        c_value=sess.run(c)
        print("c_value:\n",c_value)
        tf.summary.FileWriter("./tmp/summary",graph=sess.graph)

Python神经网络1之TensorFlow
Python神经网络1之TensorFlow
Python神经网络1之TensorFlow

OP

数据:Tensor对象
操作:Oeration对象 -OP

  1. 常见OP
    Python神经网络1之TensorFlow

操作函数操作对象tf.constant(Tensor对象)输入Tensor对象 —Constant -输出 Tensor对象tf.add(Tensor对象1,Tensor对象2)输入Tensor对象1,Tensor对象2 —Add对象 -输出 Tensor对象3

  1. 指令名称
    一张图对应一个命名空间
    tf.Graph对象为其包含的tf.Operation对象定义的一个命名空间。用户可以指定描述性名称,使程序阅读起来更轻松
def demo04():
    a=tf.constant(1,name="a")
    b=tf.constant(2,name="b")
    print("a\n",a)
    print("b\n",b)
    c=tf.add(a,b,name="c")
    print("c:\n",c)

        with tf.Session() as sess:
        c_value=sess.run(c)
        tf.summary.FileWriter("./tmp/summary",graph=sess.graph)
        print("c_value:\n",c_value)

Python神经网络1之TensorFlow
Python神经网络1之TensorFlow

Original: https://blog.csdn.net/qq_34306228/article/details/124075894
Author: VillanelleS
Title: Python神经网络1之TensorFlow



相关阅读1

Title: 轮播总结

轮播总结

一.二帧式布局实现

运用二块画布实现轮播动画

1)jq实现的滑动原理

a.初始化

Python神经网络1之TensorFlow

第一帧显示第一张图;
第二帧显示第二张图;

b.向左滑动时

Python神经网络1之TensorFlow

先向左左动画;
动画结束后,将第一帧删除;
在第二帧后添加新的帧,并将新帧的图片换成,图片数组中要显示的下一个图片

var _that = this;
            this.data.picNo++;
            if(this.data.picNo==3){
                this.data.picNo=0;
            }else if(this.data.picNo==4){
                this.data.picNo=1;
            }
            $(this.data.frameParent).find("li:first-child").animate({
                marginLeft:"-300px"
            },1000,function(){
                var temp=$(this).clone();
                $(this).remove();
                temp.css({marginLeft:"0"}).children().attr("src",_that.data.srcArr[_that.data.picNo]);
                //temp.css({marginLeft:"0"}).children().attr("data-src",_that.data.srcArr[_that.data.picNo]);
                $(_that.data.frameParent).append(temp);
            });
c.向右滑动时

Python神经网络1之TensorFlow

先删除当前位置的第二帧;
在第一帧前添加一帧,并将新帧的图片换成,图片数组中要显示的下一个图片;
最后向右做动画

var _that = this;
this.data.picNo--;
if(this.data.picNo

2)regular实现原理(固定二帧)

Python神经网络1之TensorFlow

根据方向,维持二个数组:当前显示数组,即将显示数组;
点击事件先获取第二帧数据;对第一帧做动画;
第一帧动画完了,显示第二帧,然后做第二帧动画;
第二帧动画结束后,将当前的数据变更为第二帧的数据。

二.动画/h3>

1.jq滑动动画(animate)

$(this.data.frameParent).find("li:first-child").animate({
                marginLeft:"0"
            },1000);

2.regular内置了animate动画

3.regular动画

Python神经网络1之TensorFlow

Original: https://www.cnblogs.com/jingwhale/p/6808337.html
Author: jingwhale
Title: 轮播总结

相关阅读2

Title: 如何5分钟上手使用OCR

随便打开一个Microsoft Visual Studio,新建一个WinForms项目,从下面列表中随便选择一个NET框架。

net35;net40;net45;net451;net452;net46;net461;net462;net47;net471;net472;net48;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;

创建完窗口后,切换到【程序包管理控制台】,输入下面命令并回车:

Install-Package PaddleOCRSharp -Version 1.3.1

完成PaddleOCRSharp的依赖包安装。

在窗口界面拖放一个按钮,并双击,在按钮的点击事件中,输入以下代码:

OpenFileDialog ofd = new OpenFileDialog();
  ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
  if (ofd.ShowDialog() != DialogResult.OK) return;
  var imagebyte = File.ReadAllBytes(ofd.FileName);
  Bitmap bitmap = new Bitmap(new MemoryStream(imagebyte));
  OCRModelConfig config = null;
  OCRParameter oCRParameter = new  OCRParameter ();

  OCRResult ocrResult = new OCRResult();

  //建议程序全局初始化一次即可,不必每次识别都初始化,容易报错。
  PaddleOCREngine engine = new PaddleOCREngine(config, oCRParameter);
   {
    ocrResult = engine.DetectText(bitmap );
   }
 if (ocrResult != null)
 {
    MessageBox.Show(ocrResult.Text,"识别结果");
 }

然后按F5运行,点击按钮,选择一个本地图片,进行OCR文字识别。

弹出识别结果,说明你已经上手学会了如何使用OCR,就这么简单。

微信公众号:

Python神经网络1之TensorFlow

QQ技术交流群

Python神经网络1之TensorFlow

Python神经网络1之TensorFlow

PaddleOCRSharp项目,是基于百度飞桨OCR代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测。项目封装极其简化,实际调用仅几行代码,极大的方便了中下游开发者的使用和降低了PaddleOCR的使用入门级别,同时提供不同的.NET框架使用,方便各个行业应用开发与部署。Nuget包即装即用,可以离线部署,不需要网络就可以识别的高精度中英文OCR。

关键:离线、免费、高精度、开源

项目开源地址:https://gitee.com/raoyutian/paddle-ocrsharp

github地址:https://github.com/raoyutian/PaddleOCRSharp

项目目前支持以下.NET框架,可以说,覆盖范围很广。

net35;net40;net45;net451;net452;net46;net461;net462;net47;net471;net472;net48;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;

5分钟的时间,你Get到了吗?

欢迎加入QQ交流群:318860399进行技术交流

Original: https://www.cnblogs.com/raoyutian/p/16182170.html
Author: 明月心技术学堂
Title: 如何5分钟上手使用OCR

相关阅读3

Title: 基于halcon与c#联合的视觉处理软件

1、视觉软件

当我们拿到一个视觉项目,如果有一个拖拽式视觉软件去帮我们完成这样一个项目,既省时又省力,学什么halcon、opencv、visionpro,甚至头疼的C++、C#,统统不需要,也能快速成为一名视觉工程师,哈哈哈,这样一想门槛也太低了吧。下图海康的视觉软件vision master想必各位视觉大佬都不陌生吧,每个公司都有自己研发的视觉软件,市场上五花八门的软件,不过框架都差不多,学一个其他的也差不多了吧。这些视觉软件究竟为什么框选出一个区域,就能找到一个圆、一条线、识别出数字、或者其他特征呢,这个问题也困扰了我很久,奈何自己读书少,一直困惑于此,前几天闲来无事,工地搬完砖下班回到宿舍,打开才上手不久的halcon,和在工地上自学的C#,用底层代码去编写这样一个小视觉软件。

Python神经网络1之TensorFlow

vision master

2、图像处理

利用halcon软件进行图像处理,这里用一个下班在路上捡的一个药品盖做一个模板匹配。图像处理上的细节不过多阐述,主要就是创造模板(create_shape_model)、寻找模板(create_shape_model)、点和角度刚性仿射变换,XLD轮廓任意仿射2D变换,相信各位大神对这些都不陌生,我就不在关公面前耍大刀,代码仅供跟我一样的小白参考,哈哈哈。

Python神经网络1之TensorFlow

3、halcon导出c#

用halcon菜单栏文件,将算子代码转为c#代码,因为我们待会做界面要用winform来做,到时候直接用导出的代码,大神也可以用MFC编界面。

Python神经网络1之TensorFlowPython神经网络1之TensorFlow 导出来之后,我们只需要关注action这个方法里面的代码,前面的都是定义变量,halcon的变量一般只有三个变量类型, HTuple数据变量(宽度,大小,数量),Hobject图像变量,HWindow 窗口句柄。

  private void action()
  {

    // Local iconic variables

    HObject ho_Qq20211015161226, ho_GrayImage;
    HObject ho_Rectangle, ho_ImageReduced, ho_ModelContours;
    HObject ho_ContoursAffineTrans, ho_RegionAffineTrans=null;
    HObject ho_ContoursAffineTrans1=null, ho_Rectangle1=null;

    // Local control variables

    HTuple hv_WindowHandle = null, hv_Row1 = null;
    HTuple hv_Column1 = null, hv_ModelID = null, hv_Area = null;
    HTuple hv_Row = null, hv_Column = null, hv_HomMat2D = null;
    HTuple hv_Angle = null, hv_Score = null, hv_i = null, hv_HomMat2DIdentity = new HTuple();
    HTuple hv_HomMat2DTranslate = new HTuple(), hv_HomMat2DRotate = new HTuple();
    HTuple hv_HomMat2D1 = new HTuple();
    // Initialize local and output iconic variables
    HOperatorSet.GenEmptyObj(out ho_Qq20211015161226);
    HOperatorSet.GenEmptyObj(out ho_GrayImage);
    HOperatorSet.GenEmptyObj(out ho_Rectangle);
    HOperatorSet.GenEmptyObj(out ho_ImageReduced);
    HOperatorSet.GenEmptyObj(out ho_ModelContours);
    HOperatorSet.GenEmptyObj(out ho_ContoursAffineTrans);
    HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
    HOperatorSet.GenEmptyObj(out ho_ContoursAffineTrans1);
    HOperatorSet.GenEmptyObj(out ho_Rectangle1);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.CloseWindow(HDevWindowStack.Pop());
    }
    HOperatorSet.SetWindowAttr("background_color","black");
    HOperatorSet.OpenWindow(0,0,512,512,0,"visible","",out hv_WindowHandle);
    HDevWindowStack.Push(hv_WindowHandle);
    ho_Qq20211015161226.Dispose();
    HOperatorSet.ReadImage(out ho_Qq20211015161226, "G:/实验/药瓶盖检测1.bmp");
    ho_GrayImage.Dispose();
    HOperatorSet.Rgb1ToGray(ho_Qq20211015161226, out ho_GrayImage);
    //draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
    ho_Rectangle.Dispose();
    HOperatorSet.GenRectangle1(out ho_Rectangle, 328, 456, 676, 797);
    ho_ImageReduced.Dispose();
    HOperatorSet.ReduceDomain(ho_GrayImage, ho_Rectangle, out ho_ImageReduced);
    HOperatorSet.CreateShapeModel(ho_ImageReduced, "auto", (new HTuple(-180)).TupleRad()
        , (new HTuple(180)).TupleRad(), "auto", "auto", "use_polarity", "auto", "auto",
        out hv_ModelID);
    ho_ModelContours.Dispose();
    HOperatorSet.GetShapeModelContours(out ho_ModelContours, hv_ModelID, 1);
    HOperatorSet.AreaCenter(ho_Rectangle, out hv_Area, out hv_Row, out hv_Column);
    HOperatorSet.VectorAngleToRigid(0, 0, 0, hv_Row, hv_Column, 0, out hv_HomMat2D);
    ho_ContoursAffineTrans.Dispose();
    HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ContoursAffineTrans,
        hv_HomMat2D);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.DispObj(ho_Qq20211015161226, HDevWindowStack.GetActive());
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.DispObj(ho_ContoursAffineTrans, HDevWindowStack.GetActive());
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetDraw(HDevWindowStack.GetActive(), "margin");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.DispObj(ho_Rectangle, HDevWindowStack.GetActive());
    }
    //关闭
    ho_ContoursAffineTrans.Dispose();
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.ClearWindow(HDevWindowStack.GetActive());
    }

    ho_Qq20211015161226.Dispose();
    HOperatorSet.ReadImage(out ho_Qq20211015161226, "G:/实验/药瓶盖检测2.bmp");
    HOperatorSet.FindShapeModel(ho_Qq20211015161226, hv_ModelID, (new HTuple(-180)).TupleRad()
        , (new HTuple(180)).TupleRad(), 0.6, 0, 0.5, "least_squares", 0, 0.9, out hv_Row1,
        out hv_Column1, out hv_Angle, out hv_Score);

    for (hv_i=0; (int)hv_i<=(int)((new htuple(hv_score.tuplelength()))-1); hv_i="(int)hv_i" + 1) { hoperatorset.hommat2didentity(out hv_hommat2didentity); hoperatorset.hommat2dtranslate(hv_hommat2didentity, hv_row1.tupleselect(hv_i), hv_column1.tupleselect(hv_i), out hv_hommat2dtranslate); hoperatorset.hommat2drotate(hv_hommat2dtranslate, hv_angle.tupleselect(hv_i), hv_hommat2drotate); hoperatorset.vectorangletorigid(hv_row1, hv_column1, hv_angle, hv_row1, hv_hommat2d1); ho_regionaffinetrans.dispose(); hoperatorset.affinetransregion(ho_rectangle, ho_regionaffinetrans, hv_hommat2d1, "nearest_neighbor"); ho_contoursaffinetrans1.dispose(); hoperatorset.affinetranscontourxld(ho_modelcontours, ho_contoursaffinetrans1, ho_rectangle1.dispose(); hoperatorset.genrectangle2(out ho_rectangle1, hv_column1.tupleselect( hv_i), 170, 170); if (hdevwindowstack.isopen()) hoperatorset.dispobj(ho_qq20211015161226, hdevwindowstack.getactive()); } hoperatorset.dispobj(ho_contoursaffinetrans1, hdevwindowstack.getactive() ); hoperatorset.setdraw(hdevwindowstack.getactive(), "margin"); hoperatorset.dispobj(ho_rectangle1, ho_qq20211015161226.dispose(); ho_grayimage.dispose(); ho_rectangle.dispose(); ho_imagereduced.dispose(); ho_modelcontours.dispose(); ho_contoursaffinetrans.dispose(); }< code></=(int)((new>

4、界面编写

下面就是激动人心的代码时刻了,本界面使用c#下winform编写的。首先配置halcon与vs环境,一共就只有两步,不像MFC配置那么复杂,到现在我也忘了,反正自认为很难搞,会的可以教教我,第一步添加应用,第二步添加命名空间using HalconDotNet。如果配置成功但总是报错,可以改以下生成平台

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

第一步

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

第二步

环境配置好后,进行界面的设计,大家在界面上添加hWindowControl1窗口,这里也是需要在工具箱添加halcon窗体控件的,工具箱里面控件,右键点击选择项,找到halcon安装路径,添加halcondotnet.dll文件,因为图像处理都基于halcon窗口来做的,picturebox是没法做。这里我们只需要注意模板匹配里面的控件,采集图片和清除功能。我们的理清楚我们模板匹配的思路,一、读入图像,二、画出ROI,找到所需要的模板区域,三、创建模板,将你所框选区域的模板物体进行显示、四、再读取一张图片,在这张图中进行模板搜索,识别出该图中的目标予以框出,显示目标坐标,五,清除界面。

Python神经网络1之TensorFlow

4.1、读入图像

双击采集图片按钮,我们以选取文件夹里面的图片为例,按钮中添加以下代码。

Python神经网络1之TensorFlow

4.2、画出ROI

双击画矩形按钮,设置框选的颜色,样式(一般margin),线宽,画出区域,将区域图片进行裁剪显示。

Python神经网络1之TensorFlow

4.3、创建模板

Python神经网络1之TensorFlow

4.4、读取图片,寻找模板

将匹配分数设置为0.5,这里需要注意的是,halcon处理得到的中心坐标是HTuple类型,textBox显示出来得用string类型,进行类型转换,我用了如下方法,其他也没找到比较好的方法。

Python神经网络1之TensorFlow

Python神经网络1之TensorFlow

4.5,清除界面

Python神经网络1之TensorFlow

5、结果展示

该模板匹配,检测,适用于常规目标识别,只需要模板图片和测试图片。

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

Python神经网络1之TensorFlowPython神经网络1之TensorFlowPython神经网络1之TensorFlowPython神经网络1之TensorFlow

6、还做了一些以相机实时采集的形式、查找圆、查找线、拟合、测量的一些小控件。框选出目标区域,自动找圆、找线,如下图,下次再分享,明天还得上工地,第一次写,写的不好,望各位大神提出意见,相互学习,晚安!

Python神经网络1之TensorFlow

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

Python神经网络1之TensorFlowPython神经网络1之TensorFlow

Python神经网络1之TensorFlow Python神经网络1之TensorFlow

Original: https://blog.csdn.net/qq_55834632/article/details/124673278
Author: ️169
Title: 基于halcon与c#联合的视觉处理软件