TensorFlow线性回归

目录

代码实现

MNIST数据集

神经网络构建

Softmax函数

数据简单分类


代码实现

#导包
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#使用numpy 生成200个随机点   
x_data=np.linspace(-0.5,0.5,200)[:,np.newaxis]#newaxis加维度
noise=np.random.normal(0,0.02,x_data.shape)#噪音
y_data=np.square(x_data)+noise  #加噪


#定义两个placeholder
x=tf.placeholder(tf.float32,[None,1])#定义形状
y=tf.placeholder(tf.float32,[None,1])

#输入一个x,经过一个神经网络的计算,最后会得到一个预测值y

#定义神经网络中间层
Weights_L1=tf.Variable(tf.random_normal([1,10]))#得到权值,1代表输入,权值连接输入层和中间层的。
biases_L1=tf.Variable(tf.zeros([1,10]))#偏置值
Wx_plus_b_L1=tf.matmul(x,Weights_L1) + biases_L1  #得到信号的总和
L1=tf.nn.tanh(Wx_plus_b_L1)#激活函数 作用于信号的总和

#定义神经网络输出层
Weights_L2=tf.Variable(tf.random_normal([10,1]))
biases_L2=tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2=tf.matmul(L1,Weights_L2) + biases_L2  #得到信号的总和
prediction=tf.nn.tanh(Wx_plus_b_L2)#激活函数 作用于信号的总和
#激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。
#它们将非线性特性引入到我们的网络中。
#其主要目的是将A-NN模型中一个节点的输入信号转换成一个输出信号。该输出信号现在被用作堆叠中下一个层的输入。

#二次代价函数
loss=tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#定义会话
with tf.Session() as sess:
    #变量初始化
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):#使用梯度下降法训练
        sess.run(train_step,feed_dict={x:x_data,y:y_data})
        
    #获得预测值
    prediction_value=sess.run(prediction,feed_dict={x:x_data})
    #画图
    plt.figure()
    plt.scatter(x_data,y_data)
    plt.plot(x_data,prediction_value,'r-',lw=5)#r代表颜色,-代表实线,lw:折线图的线条宽度
    plt.show()

MNIST数据集

  1. MNIST数据集的官网:Yann LeCun's website
  2. 下载下来的数据集被分成两部分:60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test)

    每一张图片包含28*28个像素,我们把这一个数组展开成一个向量,长度是28*28=784。因此在MNIST训练数据集合mnist.train.images 是一个形状为 [60000, 784] 的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。图片里的某个像素的强度值介于0-1 之间。白色部分的值为0。

MNIST数据集的标签是介于0-9的数字,我们要把标签转化为“one-hot vectors”。一个one- hot向量除了某一位数字是1以外,其余维度数字都是0,比如标签0将表示为([1,0,0,0,0,0,0,0,0,0]),标签3将表示为([0,0,0,1,0,0,0,0,0,0]) 。因此, mnist.train.labels 是一个 [60000, 10] 的数字矩阵。

 

神经网络构建

784个像素点,每张图片有对应的标签。

Softmax函数

我们知道MNIST的结果是0-9,我们的模型可能推测出一张图片是数字9的概率是80%,是数字8 的概率是10%,然后其他数字的概率更小,总体概率加起来等于1。这是一个使用softmax回归模    型的经典案例。softmax模型可以用来给不同的对象分配概率。

                                           

数据简单分类

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

#载入数据集
mnist = input_data.read_data_sets("MNIST_data",one_hot=True)

#每个批次的大小
batch_size = 100
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size

#定义两个placeholder
x = tf.placeholder(tf.float32,[None,784])
y = tf.placeholder(tf.float32,[None,10])

#创建一个简单的神经网络
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
prediction = tf.nn.softmax(tf.matmul(x,W)+b)#soft将输入信号转换为概率

#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)

#初始化变量
init = tf.global_variables_initializer()

#结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#cast将布尔值转化为浮点型0,1


with tf.Session() as sess:
    sess.run(init)
    for epoch in range(21):
        for batch in range(n_batch):
            batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
            sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
        
        acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
        print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))
                   

    

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow是一个开源的机器学习框架,用于构建和训练各种机器学习模型。线性回归是一种常见的机器学习算法,用于建立一个线性模型来预测连续型的输出变量。 在TensorFlow,可以使用以下步骤来实现线性回归: 1. 导入所需的库和模块: ```python import tensorflow as tf import numpy as np ``` 2. 准备数据: ```python # 定义输入特征和标签 x_train = np.array([...]) # 输入特征 y_train = np.array([...]) # 标签 ``` 3. 定义模型结构: ```python # 定义模型参数 W = tf.Variable(tf.random.normal([num_features, 1]), name='weight') b = tf.Variable(tf.zeros(1), name='bias') # 定义线性回归模型 def linear_regression(x): return tf.matmul(x, W) + b ``` 4. 定义损失函数: ```python # 定义均方误差损失函数 def mean_square(y_pred, y_true): return tf.reduce_mean(tf.square(y_pred - y_true)) ``` 5. 定义优化器: ```python # 定义梯度下降优化器 optimizer = tf.optimizers.SGD(learning_rate) ``` 6. 训练模型: ```python # 定义训练函数 def train_step(x, y): with tf.GradientTape() as tape: y_pred = linear_regression(x) loss = mean_square(y_pred, y) gradients = tape.gradient(loss, [W, b]) optimizer.apply_gradients(zip(gradients, [W, b])) # 迭代训练 for epoch in range(num_epochs): train_step(x_train, y_train) ``` 7. 使用模型进行预测: ```python # 使用训练好的模型进行预测 y_pred = linear_regression(x_test) ``` 这是一个简单的TensorFlow线性回归的实现示例。你可以根据自己的需求和数据进行相应的调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值