目录
摄氏度与华氏度的转换
我们已知其转换公式为:F = C * 1.8 + 32
可以得到如下对应表:
摄氏度 | 华氏度 |
---|---|
0 | 32 |
8 | 46 |
15 | 59 |
22 | 72 |
38 | 100 |
而机器学习就是在不知道转换公式的情况下,通过这几个数值,进行训练后,根据输入能正确预测。
import tensorflow as tf
import numpy as np
设置训练数据 x:输入 y:输出
x = np.array([-40,-10,0, 8, 15, 22, 38], dtype=float)
y = np.array([-40,14, 32, 46, 59, 72, 100], dtype=float)
建立模型
- 创建一个密集层——Dense()
- 将层整合到模型中——Sequential()
units:神经元个数
input_shape:该层的输入
layer0 = tf.keras.layers.Dense(units=1, input_shape=[1])
model = tf.keras.Sequential([layer0]) #将多个层按序整合到一个模型中
编译模型
- 损失函数——衡量预测值与期望值的偏差
- 优化函数——减小误差和调整参数的方法
compile()
loss:均方误差
Adam(0.1)表示学习率0.1(一般取0.001-0.1)
什么是Adam Optimization Algorithm?
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
训练模型
fit()
epochs:训练周期——样本进行一次完成的迭代
history = model.fit(x, y, epochs=500, verbose=False)
损失函数随训练周期的变化
import matplotlib.pyplot as plt
plt.xlabel('Epoch Number')
plt.ylabel("Loss Magnitude")
plt.plot(history.history['loss'])
使用模型预测数据
print(model.predict([100.0]))
打印结果:[[211.74129]] 与 100 * 1.8 + 32 = 212 相当接近了
什么是密集层/全连接层?
每个神经元都与上层的所有神经元相连接