tensorflow中x,y in zip(x_data, y_data)的用法

在一元线性回归的模型训练中,定义的数据如下:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(5)#设置随机数种子
x_data = np.linspace(-1, 1, 10) #生成-1~1之间的100个数
y_data = 2*x_data + 1.0 + np.random.randn(10)*0.3 #返回一个指定形状的数组,数组中的值服从标准正态分布(均值为0,方差为1)
print('x_data.ndim = ', x_data.ndim)
print('x_data.shape ', x_data.shape)

假如在session中,每传进去一个数据而不是一批数据就进行一次参数的调整,那么就需要我们逐个的取出来x_data和y_data中的数据,一种方法是如下:

num = x_data.shape[0]
for i in range(num):
    print('x = {0}, y = {1}'.format(x_data[i], y_data[i]))

还有一种更简单的,就是用zip()

for x,y in zip(x_data, y_data):
    print('x = {0} , y = {1}'.format(x, y))

下面分别演示采用两种方法进行模型的训练

1、采用range遍历

#2021.10.12 HIT ATCI LZH
#一元线性回归模型,实现函数的拟合
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(5)#设置随机数种子
X_train = np.linspace(-1, 1, 100) #生成-1~1之间的100个数
Y_train= 2*X_train + 1.0 + np.random.randn(100)*0.3 #返回一个指定形状的数组,数组中的值服从标准正态分布(均值为0,方差为1)
num = X_train.shape[0]#数据集的大小
plt.figure(num=1)
plt.scatter(X_train, Y_train, label = 'Original data')#绘制含噪声的散点图
plt.plot(X_train, 2*X_train + 1.0, color = 'red', linewidth=3,label='Object line')
plt.legend(loc = 3)#设置图例的显示位置
plt.show()
print('x_data.ndim = ', X_train.ndim)
print('x_data.shape ', X_train.shape)

#为训练数据申明Tensorflow占位符
X = tf.placeholder(dtype = tf.float32, name='X')
Y = tf.placeholder(dtype = tf.float32, name='Y')
#创建Tensorflow的权重和偏置且初始值设为0
w = tf.Variable(0.0)
b = tf.Variable(0.0)
#定义用于预测的线性回归模型
Y_hat = X*w + b
#定义损失函数
#loss = tf.square(Y - Y_hat, name='loss')
loss = tf.reduce_mean(tf.square(Y - Y_hat))#损失函数,均方误差
#选择梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(loss) #学习率
#申明初始化操作符
init_op = tf.global_variables_initializer()
total = []#定义一个空列表

#启动计算图
with tf.Session() as sess:
    sess.run(init_op)#初始化变量
    for i in range(100):
        train_one_loss = 0.0 #定义一个空列表,储存每次的误差
        for i in range(num):
            _, l = sess.run([optimizer, loss],feed_dict = {X:X_train[i], Y:Y_train[i]})
            train_one_loss += l
        total.append(train_one_loss/num)
    b_value, w_value = sess.run([b, w])
    print(b_value)
    print(w_value)
#查看结果
Y_pred = X_train * w_value + b_value
print('Done')
#plot the result
plt.plot(X_train,Y_train,'bo',label='Real Date')
plt.plot(X_train,Y_pred,'r',label='Predict Data')
plt.legend()#
plt.show()
plt.plot(total)
plt.show()

采用zip方式,代码如下

#2021.10.12 HIT ATCI LZH
#一元线性回归模型,实现函数的拟合
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(5)#设置随机数种子
X_train = np.linspace(-1, 1, 100) #生成-1~1之间的100个数
Y_train= 2*X_train + 1.0 + np.random.randn(100)*0.3 #返回一个指定形状的数组,数组中的值服从标准正态分布(均值为0,方差为1)
num = X_train.shape[0]#数据集的大小
plt.figure(num=1)
plt.scatter(X_train, Y_train, label = 'Original data')#绘制含噪声的散点图
plt.plot(X_train, 2*X_train + 1.0, color = 'red', linewidth=3,label='Object line')
plt.legend(loc = 4)#设置图例的显示位置
plt.show()
print('x_data.ndim = ', X_train.ndim)
print('x_data.shape ', X_train.shape)

#为训练数据申明Tensorflow占位符
X = tf.placeholder(dtype = tf.float32, name='X')
Y = tf.placeholder(dtype = tf.float32, name='Y')
#创建Tensorflow的权重和偏置且初始值设为0
w = tf.Variable(0.0)
b = tf.Variable(0.0)
#定义用于预测的线性回归模型
Y_hat = X*w + b
#定义损失函数
#loss = tf.square(Y - Y_hat, name='loss')
loss = tf.reduce_mean(tf.square(Y - Y_hat))#损失函数,均方误差
#选择梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(loss) #学习率
#申明初始化操作符
init_op = tf.global_variables_initializer()
total = []#定义一个空列表

#启动计算图
with tf.Session() as sess:
    sess.run(init_op)#初始化变量
    for i in range(100):
        train_one_loss = 0.0 #定义一个空列表,储存每次的误差
        for x,y in zip(X_train, Y_train):
            _, l = sess.run([optimizer, loss],feed_dict = {X:x, Y:y})
            train_one_loss += l
        total.append(train_one_loss/num)
    b_value, w_value = sess.run([b, w])
    print(b_value)
    print(w_value)
#查看结果
Y_pred = X_train * w_value + b_value
print('Done')
#plot the result
plt.plot(X_train,Y_train,'bo',label='Real Date')
plt.plot(X_train,Y_pred,'r',label='Predict Data')
plt.legend()#
plt.show()
plt.plot(total)
plt.show()

实验结果:

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsuaf_huasir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值