金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 正则表达式,线程安全使用

正则表达式,线程安全使用

发布时间:2019-11-03 21:56编辑:编程浏览(74)

     CancellationToken的多种应用

    前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题。

    1、正则表达式的语法

    • . 表示任何单个字符
    • [] 字符集,对单个字符给出取值范围
    • [^] 非字符集,对单个字符给出排除范围
    • *前一个字符0次或者无限次扩展
    • +前一个字符1次或无限次扩展
    • ?前一个字符0次或1次扩展
    • |左右表达式任意一个
    • {m}扩展前一个字符m次
    • {m,n}扩展前一个字符m至n次
    • ^匹配字符串开头
    • $匹配字符串结尾
    • ()分组标记,内部只能使用|操作符
    • d数字,等价于[0-9]
    • w单词字符,等价于[A-Z,a-z,0-9]

      2、python中re库的使用

      Re库是python的标准库,主要用于字符串匹配,调用方法:import re

      ### 2.1、正则表达式字符串的类型

      re库采用raw string类型来表示正则表达式,表示为
      r'text'
      raw string是不包含对转义符的再次转义的字符串,总而言就是string会对字符转义,而raw string不会,因为在正则表达中会出现转义符号,所以避免繁琐我们使用raw string

      ### 2.2、Re库主要功能函数

    • re.search()在一个字符串中搜索正则表达式的第一个位置,返回match对象

    • re.match()从一个字符串的开始位置起匹配正则表达式,返回match对象
    • re.findall()搜索字符串,以列表类型返回全部能匹配的子串
    • re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
    • re.finditer()搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
    • re.sub()在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

      #### 2.2.1、re.search(pattern, string, flags=0)

      在一个字符串中搜索正则表达式的第一个位置,返回match对象

    • pattern : 正则表达式的字符串或原生字符串表示

    • string : 待匹配字符串
    • flags : 正则表达式使用时的控制标记
      • re.I re.IGNORECASE 忽略正则表达式的大小写,[A‐Z]能够匹配小写字符
      • re.M re.MULTILINE 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
      • re.S re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

    举例说明:

    import re
    match = re.search(r'[1-9]d{5}', 'BIT 100081')
    if match:
        print(match.group(0))
    
    结果为100081
    

    这是线程安全的最后一篇了,主要介绍CancellationToken的多种应用。

    但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗。某篇文章的内容是属于体育新闻还是经济新闻等,这个结果是有一个全集的离散值,这类问题就是分类问题。

    2.2.2、re.match(pattern, string, flags=0)

    从一个字符串的开始位置起匹配正则表达式,返回match对象
    参数同search函数
    举例说明:

    import re
    match = re.match(r'[1-9]d{5}', 'BIT 100081')
    print(match.group(0))
    
    结果会报错,match为空,因为match函数是
    从字符串开始位置开始匹配,因为从开始位置没有匹配到,所以为空
    

    1,ThreadPool直接启动线程,传递CancellationToken。

    我有时会把回归问题看成是分类问题,比如对于房价值的预测,在实际的应用中,一般不需要把房价精确到元为单位的,比如对于均价,以上海房价为例,可以分为:5000-10万这样的一个范围段,并且以1000为单位就可以了,尽管这样分出了很多类,但至少也可以看成是分类问题了。

    2.2.3、re.findall(pattern, string, flags=0)

    搜索字符串,以列表类型返回全部能匹配的子串
    参数同search
    举例说明:

    import re
    ls=re.findall(r'[1-9]d{5}', 'BIT100081 TSU100084')
    print(ls)
    
    结果为['100081', '100084']
    

    2,Task启动线程,传递CancellationToken。Task传递方式分为两种,一种通过Task的参数进行传递,另一种通过向线程内传递对象的方式传递CancellationToken。

    因此分类算法应用范围非常广泛,我们来看下在tensorflow中如何解决这个分类问题的。
    本文用经典的手写数字识别作为案例进行讲解。

    2.2.4、re.split(pattern, string, maxsplit=0, flags=0)

    将一个字符串按照正则表达式匹配结果进行分割返回列表类型

    • maxsplit : 最大分割数,剩余部分作为最后一个元素输出
      举例说明 :
    import re
    re.split(r'[1-9]d{5}', 'BIT100081 TSU100084')
    结果['BIT', ' TSU', ' ']
    re.split(r'[1-9]d{5}', 'BIT100081 TSU100084', maxsplit=1)
    结果['BIT', ' TSU100081']
    

    3,CancellationToken的回调函数应用。

    准备数据

    # 准备数据
    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets('D:/todel/python/MNIST_data/', one_hot=True)
    

    执行上述代码后,会从线上下载测试的手写数字的数据。
    不过在我的机器上运行时好久都没有下载下相应的数据,最后我就直接到 网站上下载其中的训练数据和测试数据文件到指定的目录下,然后再运行这个程序就能把数据给解压开来。
    图片 1

    这里总共大概有6万个训练数据,1万个测试数据。

    手写数字是一堆28X28像素的黑白图片,例如:
    图片 2

    在本次案例中,我们把这个数组展开成一个向量,长度是 28x28 = 784,也就是一个图片就是一行784列的数据,每列中的值是一个像素的灰度值,0-255。
    为何要把图像的二维数组转换成一维数组?
    把图像的二维数组转换成一维数组一定是把图像中的某些信息给丢弃掉了,但目前本文的案例中也可以用一维数组来进行分类,这个就是深度神经网络的强大之处,它会尽力寻找一堆数据中隐藏的规律。
    以后我们会用卷积神经网络来处理这个图像的分类,那时的精确度就能再次进行提高。
    但是即便把此图像数据碾平成一维数据的方式也能有一个较好的分辨率。

    另外这里有一个关于分类问题的重要概念就是one hot数据,虽然我们对每个图片要打上的标签是0-9数字,但在分类中用一个总共有10个占位分类的数字来表示,如果属于哪个类就在那个位置设置为1,其它位置为0.
    例如:
    标签0将表示成([1,0,0,0,0,0,0,0,0,0,0])
    标签2将表示成([0,0,1,0,0,0,0,0,0,0,0])
    这样结果集其实是一个10列的数据,每列的值为0或1。

    2.2.5、re.finditer(pattern, string, maxsplit=0, flags=0)

    搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
    参数同search
    举例说明 :

    import re
    for m in re.finditer(r'[1-9]d{5}', 'BIT100081 TSU100084'):
        if m:
            print(m.group(0))
    结果为
    100081
    100084
    

    话不多说,请看代码。

    添加层

    添加层的函数跟前面几个博文中一样,这里依然把它贴出来:

    def add_layer(inputs, in_size, out_size, activation_function=None):
        """
        添加层
        :param inputs: 输入数据
        :param in_size: 输入数据的列数
        :param out_size: 输出数据的列数
        :param activation_function: 激励函数
        :return:
        """
    
        # 定义权重,初始时使用随机变量,可以简单理解为在进行梯度下降时的随机初始点,这个随机初始点要比0值好,因为如果是0值的话,反复计算就一直是固定在0中,导致可能下降不到其它位置去。
        Weights = tf.Variable(tf.random_normal([in_size, out_size]))
        # 偏置shape为1行out_size列
        biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
        # 建立神经网络线性公式:inputs * Weights + biases,我们大脑中的神经元的传递基本上也是类似这样的线性公式,这里的权重就是每个神经元传递某信号的强弱系数,偏置值是指这个神经元的原先所拥有的电位高低值
        Wx_plus_b = tf.matmul(inputs, Weights) + biases
        if activation_function is None:
            # 如果没有设置激活函数,则直接就把当前信号原封不动地传递出去
            outputs = Wx_plus_b
        else:
            # 如果设置了激活函数,则会由此激活函数来对信号进行传递或抑制
            outputs = activation_function(Wx_plus_b)
        return outputs
    

    2.2.6、re.sub(pattern, repl, string, count=0, flags=0)

    在一个字符串中替换所有匹配正则表达式的子串返回替换后的字符串

    • repl : 替换匹配字符串的字符串
    • count : 匹配的最大替换次数
      举例说明:
    import re
    re.sub(r'[1-9]d{5}', ':zipcode', 'BIT100081 TSU100084')
    结果为
    'BIT:zipcode TSU:zipcode'
    

    本文由金沙国际官网发布于编程,转载请注明出处:正则表达式,线程安全使用

    关键词: