tensorflow学习--线性回归

这篇博客记录了作者学习TensorFlow的过程,通过实现简单的线性回归来熟悉网络搭建。文章提到了numpy.linspace的使用,理解数据形状的重要性,以及matmul与multiply的区别。虽然这次未使用bp算法,而是进行了2000次迭代,但指出这种方法不适用于大规模数据。最后,作者简要提及了梯度下降优化器的选择。

最近在学习tensorflow,用优快云记录一下学习的过程

本次代码实现简单的线性回归,数据拟合,代码比较简单没有用到bp算法,只是熟悉一下tensorflow网络的搭建

#线性回归的案例
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]#数据维度是200行一列,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])

#定义神经网络中间层
#相当于有10个神经元
Weight_L1 = tf.Variable(tf.random_normal([1,10]))#一行十列,normal和numpy中语法有差别
biases_L1 = tf.Variable(tf.zeros([1,10]))
#tf.matmul()将矩阵a乘以矩阵b,生成a * b
#这里一直不是很懂,乘法以后是200*10的矩阵,加上偏置以后还是200*10的,相当于整个矩阵加的
#偏置生成了200*10的偏置,每一行都是相同的
#这里不能用线性代数矩阵运算的思维,不然两个矩阵是不能相加的
Wx_plus_b_L1 = tf.matmul(x,Weight_L1)+biases_L1 #200*10大小的矩阵
#中间层的输出,用tanh作为激活函数
L1 = tf.nn.tanh(Wx_plus_b_L1)

#定义神经网络输出层
Weight_L2 = tf.Variable(tf.random_normal([10,1]))
biases_L2 = tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
prediction = tf.nn.tanh(Wx_plus_b_L2)

#二次代价函数
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)
    plt.show()

写代码的一些困惑或者感悟:

1.numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

在指定的间隔内返回均匀间隔的数字。

返回num均匀分布的样本,在[start, stop]。

这个区间的端点可以任意的被排除在外。

具体使用:https://blog.youkuaiyun.com/you_are_my_dream/article/details/53493752

2.数据x是[n,1]大小的,我们这里的样本是一个一个点,如果样本换成图片的话,可以将样本集里的每一张图片变成一行,这样一行代表一张图片,即一个样本,而行数,代表样本的数量,列数表示图片的大小

3.matmul和multiply是有区别的,matmul就是传统的线性代数的矩阵乘法,这里是【200,1】*【1,10】得到【200,10】,10是神经元的个数,但Wx_plus_b_L1 = tf.matmul(x,Weight_L1)+biases_L1,这句话不是很能理解,如果按照正常矩阵加法,是不能运算的,可能tensorflow中+和add函数有区别??待议……………………

反正最后生成的矩阵大小是200*10的

4.本次没有用到bp算法,只是进行多次迭代,总共迭代了2000次,也就是数据x,总共用了2000次,这只是数据小的时候才能用,数据一大,肯定不能用这个网络………………比如训练图片的时候

5.train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

这一步,有许多优化器,我就随便选择了一个,下次试试别的。

结果图:

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值