网站cms模板,如何把网站推广出,哈尔滨门户网站是什么,网站备案有哪些费用上一篇#xff1a;2 用TensorFlow构建一个简单的神经网络-CSDN博客
本篇目标是介绍如何构建一个简单的线性回归模型#xff0c;要点如下#xff1a;
了解神经网络原理构建模型的一般步骤模型重要参数介绍 1、神经网络概念
接上一篇#xff0c;用tensorflow写了一个猜测西…上一篇2 用TensorFlow构建一个简单的神经网络-CSDN博客
本篇目标是介绍如何构建一个简单的线性回归模型要点如下
了解神经网络原理构建模型的一般步骤模型重要参数介绍 1、神经网络概念
接上一篇用tensorflow写了一个猜测西瓜价格的简单模型理解代码前先了解下什么是神经网络。
下面是百度AI对神经网络的解释
神经网络是一种运算模型由大量的节点或称神经元之间相互联接构成每个节点代表一种特定的输出函数称为激励函数activation function。每两个节点间的连接都代表一个对于通过该连接信号的加权值称之为权重这相当于人工神经网络的记忆。网络的输出则依网络的连接方式权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近也可能是对一种逻辑策略的表达。 神经网络是一种广泛并行互连的网络它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。 首先我们要了解下密集层也叫全连接层密集层是一个深度连接的神经网络层在神经网络中指的是每个神经元都与前一层的所有神经元相连的层。
在上一篇我们创建了预测价格模型代码为
model tf.keras.Sequential([ tf.keras.layers.Dense(1, input_shape[1]) ])
其中Sequential是顺序的意思Dense就是密集层。 看文字有点抽象举个例子如下图所示神经元a1与所有输入层数据相连X1,X2,X3其他神经元也一样都与上一层神经元相连这样形成的神经网络就是密集层。 它们之间的数学关系为
某个神经元是由连接的上一层神经元分别乘上权重w,再加上偏差b得到例如计算a1 权重w的数字下标可以按照顺序命名比如第一个神经元计算的权重可以为w11、w12……第二个神经元计算的权重可以为w21、w22……
a2、a3计算以此类推。 了解这些基本的原理后我们就开始创建一个简单的费用预测模型。 3、西瓜费用预测模型详解
代码如下
import numpy as np
import tensorflow as tf# 西瓜的重量
weight np.array([1, 3, 4, 5, 6, 8], dtypefloat)# 对应的费用
total_cost np.array([1.7, 4.1, 5.3, 6.5, 7.7, 10.1], dtypefloat)model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape[1])
])model.compile(losstf.losses.mean_squared_error, optimizerSGD)history model.fit(weight, total_cost, epochs500)# 训练完成后预测10斤西瓜的总费用
print(model.predict([10]))
上一篇西瓜费用计算公式 费用1.2元/斤*重量0.5元
即y1.2x0.5
这是一个一元线性回归问题只有一个自变量x和一个因变量y机器学习要推算出权重w1.2, 偏差b0.5才能准确预测费用。 具体流程如下
1训练数据准备
西瓜重量 weight[1, 3, 4, 5, 6, 8]
对应的费用 total_cost[1.7, 4.1, 5.3, 6.5, 7.7, 10.1] 2构建模型
model tf.keras.Sequential([ tf.keras.layers.Dense(1, input_shape[1]) ]) tf.keras.layers.Dense(1, input_shape[1])参数1表示1个神经元我们只要预测费用y所以输出层只要一个神经元就可以了注意神经元不用包含输入层。input_shape[1]表示输入数据的形状为单元素列表即每个输入数据只有一个值。因为只有一个变量x(西瓜的重量)所以此处输入形状是[1] 该模型的示意图 可以用model.summary()查看模型摘要代码如下
import numpy as np
import tensorflow as tf# 西瓜的重量
weight np.array([1, 3, 4, 5, 6, 8], dtypefloat)# 对应的费用
total_cost np.array([1.7, 4.1, 5.3, 6.5, 7.7, 10.1], dtypefloat)model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape[1])
])# 查看模型摘要
model.summary()
运行结果 可以看到可训练参数有2个即公式中的w1和b1。 3设置损失函数和优化器
model.compile(losstf.losses.mean_squared_error, optimizerSGD)
mean_squared_error是均方误差指的是预测值与真实值差值的平方然后求和再平均。公式为 MSE1/n Σ(P-G)^2 P为预测值G为真实值
SGD即随机梯度下降Stochastic Gradient Descent是一种迭代优化算法。 4设置训练数据
history model.fit(weight, total_cost, epochs500)
设置训练数据的特征和标签在上述代码中分别是西瓜的重量和费用weight、total_cost设置训练轮次epochs5001个epochs是指使用所有样本训练一次。 (5) 查看训练结果
看下面的训练过程第8个epoch的时候损失值loss已经很小了训练轮次不需要设置到500就可以有很好的预测效果了。 刚开始loss很高使用优化算法慢慢调整了权重loss值可以很好地衡量我们的模型有多好。
我们把epoch的值调小看看程序猜测的权重w和偏差b是多少以及loss值的计算。 代码改动如下 epochs5用model.get_weights()获取程序猜测的权重数据
import numpy as np
import tensorflow as tf# 西瓜的重量
weight np.array([1, 3, 4, 5, 6, 8], dtypefloat)# 对应的费用
total_cost np.array([1.7, 4.1, 5.3, 6.5, 7.7, 10.1], dtypefloat)model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape[1])
])model.compile(losstf.losses.mean_squared_error, optimizerSGD)history model.fit(weight, total_cost, epochs5)# 获取权重数据
w model.get_weights()[0]
b model.get_weights()[1]print(w)
print(w)
print(b: )
print(b)# 训练完成后预测10斤西瓜的总费用
print(model.predict([10]))
运行结果 训练了5个epoch后程序猜测w是1.1807659b为0.33192113 ywxb1.1807659*100.3319211312.139581
所以预测10斤西瓜的总费用是12.139581 4、创建更复杂一点的模型
现实生活中我们要预测的东西影响因素可能有很多个如房价预测房价可能受到房屋面积、房间数量等等因素影响。思考一下下面的神经网络图创建模型时要如何设置参数呢 model tf.keras.Sequential([tf.keras.layers.Dense(2, input_shape[3]),tf.keras.layers.Dense(1)
])