美文网首页
基于Python代码理解机器学习原理

基于Python代码理解机器学习原理

作者: 第九宇宙的声音 | 来源:发表于2020-09-07 14:12 被阅读0次

    【关键字】

    1. Pyhton

    2. TensorFlow

    3. 机器学习

    【场景定义】

    假定一些样本数据和正确结果,而且人为添加一些噪音数据(偏差数据),提供给TensorFlow进行机器学习,看看机器学习效果如何,并通过实验理解机器学习

    1)样本数据模型:f(x) = ax^2 + bx + c,即抛物线,当然也可以任意定义一个模型

    2)噪音数据:y=f(x) + 随机数,随机数就作为偏差值,产生噪音数据

    3)输入和输出:输入数据x和输出数据y都是明确的一维数据,是最简单的模型,取值:x=[0,300],得到的y就是输出数据

    import tensorflow as tf

    import  numpy as np

    import  matplotlib.pyplot as plt

    import  os

    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    #产生样本数据和图形

    numdots=300

    inputdata=[]

    for i in range(numdots):

        x=np.random.normal(0.8,10)

        y=0.3*x*x-0.2*x+0.5+np.random.normal(0,6)

        inputdata.append([x,y])

    x_data=[v[0] for v in inputdata]

    y_data=[v[1] for v in inputdata]

    【神经网络】

    基于Tesonflow构建神经网络,用到了神经网络的几个常用方法:

    1)array.reshape(): 生成矩阵

    2)placeholder:添加计算占位符节点,相当于定义一个参数,需要重点理解清楚

    X = tf.placeholder(dtype=tf.float32, shape=[144, 10], name='X')

    参数说明

    dtype:数据类型,必填,默认为value的数据类型,传入参数为tensorflow下的枚举值(float32,float64.......)

    shape:数据形状,选填,不填则随传入数据的形状自行变动,可以在多次调用中传入不同形状的数据

    name:常量名,选填,默认值不重复,根据创建顺序为(Placeholder,Placeholder_1,Placeholder_2.......)

    3)Variable:变量域,相当于设置一个变量

    4)relu:线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元

    5)matmul:将矩阵 a 乘以矩阵 b,生成a * b

    6)reduce_mean :计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值

    7)GradientDescentOptimizer:实现实现梯度下降算法的优化器类,用于构造一个新的梯度下降优化器实例

    #构建神经网络模式

    x_data=np.array([x_data]).reshape(-1,1)

    y_data=np.array([y_data]).reshape(-1,1)

    x_h=tf.placeholder(dtype=tf.float64,shape=[None,1],name="xh")

    y_h=tf.placeholder(dtype=tf.float64,shape=[None,1],name="yh")

    w=tf.Variable(np.random.normal(0,0.3,size=[1,20]),dtype=tf.float64)

    b=tf.Variable(np.random.normal(0.0,0.5,size=[20]),dtype=tf.float64)

    y0=tf.nn.relu(tf.matmul(x_h,w)+b)

    w1=tf.Variable(np.random.normal(0,0.5,size=[20,1]),dtype=tf.float64)

    b1=tf.Variable(np.random.normal(0,0.8,size=[1]),dtype=tf.float64)

    y=(tf.matmul(y0,w1)+b1)

    los=tf.reduce_mean((tf.square(y-y_h)))

    tran=tf.train.GradientDescentOptimizer(0.001).minimize(los)

    【机器训练】

    训练主要在session中进行交互,session具有管理CPU/GPU计算能力和网络连接功能,相当于一个上下文,使用参数是:

    1)Session:Session作为会话,主要功能是指定操作对象的执行环境,Session类构造函数有3个可选参数。

    target(可选):指定连接的执行引擎,多用于分布式场景。

    graph(可选):指定要在Session对象中参与计算的图(graph)。

    config(可选):辅助配置Session对象所需的参数(限制CPU或GPU使用数目,设置优化参数以及设置日志选项等)。

    2)global_variables_initializer:返回一个用来初始化计算图中所有global variable的op,通常使用方式是:sess.run(tf.global_variables_initializer()),启动所需要的数据流图进行计算。

    3)session.run:执行计算,参数是:run(op, data),比如:

    import tensorflow as tf

    a = tf.add(1, 2)

    # 定义了一个op操作,恒等于1+2 = 3

    b = tf.multiply(a, 2)

    # 定义了相乘操作,a*2

    session = tf.Session()

    v1 = session.run(b)

    print(v1)

    # v1=(1+2) * 2  =6

    replace_dict = {a:20}

    # a重新定义为常量20

    v2 = session.run(b, feed_dict = replace_dict)

    print(v2)

    # V2= 20 *2 = 40

    训练次数越高,如果模型合理的话,拟合结果会越准确,本文是明确的抛物线模型,所以训练结果能较好的回归

    【使用训练结果】

    训练结束后,在相同的上下文计算,可以使用训练结果看看学习效果

    #用神经网络计算X上的所有点的Y值,绘制图形,看效果

    testx=np.linspace(-30,30,60,dtype=np.float32).reshape(-1,1)

    testy=sess.run(y,feed_dict={x_h:testx})

    #plt.scatter(testx,testy)

    plt.scatter(x_data,y_data)

    plt.plot(testx,testy)

    plt.show()

    上述代码可以直接运行,得到结果是:

    蓝点:带有噪音的样本数据

    曲线:训练结束后,基于训练结果计算得到的数据,已经非常接近于去除噪音的样本模型了

    【后记】

    引用:https://www.cnblogs.com/youcole/p/13626233.html

    参考1:https://blog.csdn.net/liaogaobo2008/article/details/81019537

    参考2:https://www.jianshu.com/p/cd8e76dfeb01

    相关文章

      网友评论

          本文标题:基于Python代码理解机器学习原理

          本文链接:https://www.haomeiwen.com/subject/ikakektx.html