tf#单层感知器实现(1.np实现,2.tf实现)

1.基础概念

1.建模之前,我们把数据集分成3部分

  • 训练集:用来训练构建模型
  • 测试集:等模型训练好之后,用来测试模型的好坏
  • 验证集:在模型训练阶段,测试模型好坏
  1. 回归/分类/聚类总结
    回归:预测数据为连续类型
    分类:预测数据为类别型数据,并且类别已知
    聚类:预测数据为类别型数据,但类别未知
2.模型收敛条件

1.误差小于,某个预先设定的较小的值
2.2次迭代之间的权值,很小
3.设定最大迭代次数,当迭代超过最大次数就停止

第一个次,不用tf的感知器描述

import numpy as np
import matplotlib.pyplot as plt

# 定义输入的数据
X = np.array([[1, 3, 3],
              [1, 4, 3],
              [1, 1, 1],
              [1, 2, 1]])

# 定义标签
T = np.array([[1],
              [1],
              [-1],
              [-1]])

# 权值初始化
W = np.random.random([3,1])
# 设置学习率()
lr = 0.1
# 神经网络输出
Y = 0

# 跟新权值的函数
def train():
    global X,Y,T,W,lr
    # 同时计算4个数据的预测值,Y(4,1)
    Y = np.sign(np.dot(X, W))
    # T-Y得到4个标签与预测值的误差E(4,1)
    E = T - Y
    # 计算权值的变化
    d_w = lr*(X.T.dot(E))/X.shape[0]
    # 跟新权值
    W = W +d_w


for i in range(100):
    train()
    # 当前训练次数
    print('当前训练次数:',i+1)
    print('当前权值',W)
    # 计算当前输出
    Y = np.sign(np.dot(X,W))
    if (Y==T).all():
        print('finish')
        break

使用tf的单层感知器
import tensorflow as tf
import os
from tensorflow.examples.tutorials.mnist import input_data
# mnist = input_data.read_data_sets('./data/mnist/input_data',one_hot=True)

def full():
    # 获取真实的数据
    mnist = input_data.read_data_sets('./data/mnist/input_data', one_hot=True)
    # 1.建立数据的占位符,x [None,784],y_true [None,10]
    with tf.variable_scope('data'):
        x = tf.placeholder(tf.float32,[None, 784])
        y_true = tf.placeholder(tf.int32,[None, 10])

    # 2.建立一个全连接层的神经网络 权重w[784,10],b[10]
    with tf.variable_scope('fc_model'):
        # 创建一个变量
        weight = tf.Variable(tf.random.normal([784, 10],mean=0.0,stddev=1.0),name='w')
        # tf.constant():常量
        bias = tf.Variable(tf.constant(0.0,shape=[10]))

        # 预测一个输出结果 [none,784] * [784,10] + [10] = [none,10]
        y_predict = tf.matmul(x,weight) + bias

    # 3. 求出所有样本的损失,然后求平均值
    # 交叉熵损失
    with tf.variable_scope('fc_model'):
        # 求平均交叉熵损失
        loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,  # 真实值
            logits=y_predict,  # 样本加权之后的值
            name=None))

    # 4.梯度下降求出损失
    with tf.variable_scope('optimizer'):
        # 0.1 学习率 minimize(loss) 最小化损失
        train_op=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    # 5 计算准确率
    with tf.variable_scope('acc'):
        # 比较准确率,测试值,和实际值是否相等,相等为1不能为0 返回一个【1,0,0,1,0,1】
        equal_list = tf.equal(tf.argmax(y_true,1),tf.argmax(y_predict,1))
        accuracy = tf.reduce_mean(tf.cast(equal_list, tf.float32))


    # 定义一个初始化的op
    init_op = tf.global_variables_initializer()
    # 开启绘画训练
    with tf.Session() as sess:
        # 初始化op
        sess.run(init_op)

        # 迭代
        for i in range(2000):
            # 取出真实存在的特征值,目标值
            mnist_x, mnist_y = mnist.train.next_batch(50)  # 每次获取50个数据
            # 运行op训练

            sess.run(train_op, feed_dict={x: mnist_x, y_true: mnist_y})

            # 打印准确率
            print('训练%d次,准确率%f'%(i, sess.run(accuracy, feed_dict={x: mnist_x, y_true: mnist_y})))


    return None

if __name__ == "__main__":
    full()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值