直线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值来提高准确率