TensorFlow1.X和2.0实践:单变量线性回归学习记录+tensorboard

前言

心慕人工智能久矣,但是知识面和工作使用很少,而且入门比较困难,只能闲暇之余了解一番。神经网络真的很神奇,一线算法研发就不想了,能够使用人工智能平台例如Tensorflow,可以解决实际的问题,是我想要拥有的。这第一章我已经看了几遍了,唉,衰仔啊!目前看的是慕课的实用视频:

https://www.icourse163.org/course/ZUCC-1206146808

Tensorflow安装:

这里不做说明,推荐使用anaconda进行tensorflow的安装,简单方便。2.0在我写完这个之后换个电脑发现的,改成了动态,session我也没搞明白就不用搞了!

 

1.X代码

最简单的例子:

第一步为获取数据,使用的是自动生成的

第二步是模型建立

第三步是建立损失函数和优化器

第四步是迭代优化

 

# --coding:utf-8

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

#设置随机数种子
np.random.seed(5)
x_data = np.linspace(-1,1,100)
#y=2x+1 + 噪声
y_data = 2*x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4

#查看生成的图像
plt.scatter(x_data,y_data)
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)
# plt.show()

x = tf.placeholder("float",name ="x")
y = tf.placeholder("float",name="y")
#定义模型函数
def model(x,w,b):
    return tf.multiply(x,w) + b

w = tf.Variable(1.0,name="w0")
b = tf.Variable(0.0,name="b0")

pred = model(x,w,b)
#迭代次数
train_epochs = 10
#学习率、步长
learning_rate = 0.05
#使用均方差作为损失函数
loss_function = tf.reduce_mean(tf.square(y-pred))

#梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

b0temp = 0
w0temp = 0

for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        b0temp=b.eval(session=sess)
        w0temp=w.eval(session=sess)
        plt.plot(x_data,w0temp*x_data+b0temp)
    print(epoch,w0temp,b0temp)

打印结果如下:

0 1.1141459 1.8249046
1 1.9090568 1.1080607
2 1.9761181 1.0475844
3 1.9817748 1.042483
4 1.9822522 1.0420525
5 1.9822925 1.0420163
6 1.982296 1.0420133
7 1.9822965 1.0420128
8 1.9822965 1.0420128
9 1.9822965 1.0420128

 

2.0代码

第一步为获取数据,使用的是自动生成的

第二步是模型建立,要使用keras才行。

 

# --coding:utf-8

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

# 设置随机数种子
np.random.seed(5)
x_data = np.linspace(-1, 1, 100)
# y=2x+1 + 噪声
y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4

# 查看生成的图像
plt.scatter(x_data, y_data)
plt.plot(x_data, 2 * x_data + 1.0, color='red', linewidth=3)
#plt.show()
# 初始化顺序模型(注:顺序模型Sequential 有输入,有输出,按照顺序搭建)全连接层
model = tf.keras.Sequential()
#
#model.add(tf.keras.layers.Dense(60))
model.add(tf.keras.layers.Dense(1))#,input_shape=(1,)
#编译模型,【optimizer=‘adam’,优化器:梯度下降法优化】 【loss=‘mse’, 损失函数:使用均方差判断误差】
model.compile(optimizer='adam',loss='mse')
log = model.fit(x_data,y_data,epochs=1000)
print(model.predict([1.0,2.0,3.0]))

打印结果:

 32/100 [========>.....................] - ETA: 0s - loss: 0.1142
100/100 [==============================] - 0s 30us/sample - loss: 0.1390
Epoch 1000/1000

 32/100 [========>.....................] - ETA: 0s - loss: 0.1123
100/100 [==============================] - 0s 40us/sample - loss: 0.1390
[[3.007296]
 [4.981323]
 [6.955349]]

如何使用tensorflow?

我直接用2.0了,使用起来好像更简单了?只需要定义这个对象,然后在fit中回调就好了。

from tensorflow.keras.callbacks import TensorBoard
model.compile(optimizer='adam',loss='mse')

# 定义日志目录,必须是启动web应用时指定目录的子目录,建议使用日期时间作为子目录名
log_dir="D:\Tensorflow\HelloWorld\log"
tensorboard_callback = TensorBoard(log_dir=log_dir, histogram_freq=1)  # 定义TensorBoard对象

log = model.fit(x_data,y_data,epochs=2000,callbacks=[tensorboard_callback])

然后就可以使用命令行打开了:

(base) D:\Tensorflow\HelloWorld>tensorboard --logdir log
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass
--bind_all
TensorBoard 2.0.0 at http://localhost:6006/ (Press CTRL+C to quit)

OK!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值