利用tf.data和Sequential()中的全连接层Dense完成-----直线拟合问题(一)

直线y=kx+b,先确定w,b采集真实的x,y的值,

通过计算误差,梯度更新求出期望的w,b

1.采集数据

循环60000次,保存每次x,y的值;

x =[]
y = []
z=10.056
for i in range(0,60000):
	x.append(z)
	res=3*z + 10.057
	y.append(res)
	z+=1.003

2 .生成dataset

使用 tf.data.Dataset.from_tensor_slices 进行加载数据集.利用zip()将数据和标签压缩在一起,并打乱shuffle(),batch()则是将数据以多少条进行批处理

from tensorflow import keras
import tensorflow as tf 
import numpy as np 
data_train=tf.data.Dataset.from_tensor_slices(np.array(x).reshape(60000,1))
#数据集
label_train=tf.data.Dataset.from_tensor_slices(np.array(y).reshape(60000,1))
#标签集
dataset=tf.data.Dataset.zip((data_train,label_train))#压缩
dataset=dataset.shuffle(60000).repeat().batch(64)#打乱,重复,分批

3.构建模型测试

keras中的主要数据结构是model(模型),它提供定义完整计算图的方法。通过将图层添加到现有模型/计算图,我们可以构建出复杂的神经网络。
这里用Sequential模型中的------全连接层,将dense层的输入设置成一,输出为一

model=tf.keras.Sequential()                       #构建Sequential模型中的
model.add(keras.layers.Dense(1,input_shape=(1,)))  #全连接层
model.compile(optimizer='adam',loss='mse',metrics=['accuracy'])
steps=60000//64
model.fit(dataset,epochs=100,steps_per_epoch=steps)#训练模型

函数介绍:
model.compile(optimizer = 优化器, loss = 损失函数, metrics = ["准确率”])

optimizer可以是字符串形式给出的优化器名字,也可以是函数形式(loss也一样),使用函数形式可以设置学习率、动量和超参数(这里是给出字符串形式"adam"优化器名字)

Metrics标注网络评价指标
例: “accuracy” : y_ 和 y 都是数值,如y_ = [1] y = [1] #y_为真实值,y为预测值

model.fit( x, y, batch_size, epochs, verbose, callbacks=None,validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

训练过程省略100个如下图结果:
在这里插入图片描述

4.最后查看测试结果

print(model.predict(np.array([10.054])))

结果:
在这里插入图片描述
可以通过提高epoch值来提高准确率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值