吴恩达机器学习coffe roasting

导入用到的库
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from lab_utils_common import dlc
from lab_coffee_utils import load_coffee_data, plt_roast, plt_prob, plt_layer, plt_network, plt_output_unit
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

载入数据,X记载咖啡烘焙的温度和持续时间,Y实际为表现,即咖啡豆烘焙结果的好坏

X,Y = load_coffee_data();
print(X.shape, Y.shape)

 运行结果:(200,2) (200,1)

plt_roast(X,Y)

展示了原始数据以及分区 

print(f"Temperature Max, Min pre normalization: {np.max(X[:,0]):0.2f}, {np.min(X[:,0]):0.2f}")
print(f"Duration    Max, Min pre normalization: {np.max(X[:,1]):0.2f}, {np.min(X[:,1]):0.2f}")
norm_l = tf.keras.layers.Normalization(axis=-1)
norm_l.adapt(X)  # learns mean, variance
Xn = norm_l(X)
print(f"Temperature Max, Min post normalization: {np.max(Xn[:,0]):0.2f}, {np.min(Xn[:,0]):0.2f}")
print(f"Duration    Max, Min post normalization: {np.max(Xn[:,1]):0.2f}, {np.min(Xn[:,1]):0.2f}")

先以两位小数的精度读出温度、烘焙持续时长的最大值和最小值

数据的标准化 :用keras库进行

axis=-1代表在列上进行标准化

调用adapt方法,让标准化层学习数据的均值和方差,X是输入数据,并将标准化后的值赋给Xn

Xt = np.tile(Xn,(1000,1))
Yt= np.tile(Y,(1000,1))   
print(Xt.shape, Yt.shape)   

np.tile(A,reps) 会将数组 A 按照 reps 指定的模式进行重复。

(1000,1)代表行重复1000次,列重复1次

运行结果:(200000,2)(200000,1)

创建神经网络

tf.random.set_seed(1234)  # applied to achieve consistent results
model = Sequential(
    [
        tf.keras.Input(shape=(2,)),
        Dense(3, activation='sigmoid', name = 'layer1'),
        Dense(1, activation='sigmoid', name = 'layer2')
     ]
)

set_seed(1234)的主要作用是确保神经网络在不同运行中的初始状态、训练过程和结果具有一致性和可重复性。

shape=(2,)定义了输入数据的形状,这里表示输入数据是一个二维向量。如果后面的model.fit规定了输入,这步可省略

Dense(神经单元个数,激活函数,名称)

model.summary()

介绍输出模型各层的参数状况,运行结果

Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
layer1 (Dense) (None, 3) 9
layer2 (Dense) (None, 1) 4
=================================================================
Total params: 13
Trainable params: 13
Non-trainable params: 0
_________________________________________________________________

Param = (输入数据维度+1)* 神经元个数
+1,是因为到每个神经元都有一个Bias。

第二层的输入维度是上一层神经元的个数,因此(3+1)*1=4

plt_layer(X,Y.reshape(-1,),W1,b1,norm_l)

调用该函数观察第一个隐藏层每个神经元训练后的结果

其中:颜色映射代码如下:

 cmap = plt.get_cmap('Blues')#获取 'Blues' 颜色映射
    new_cmap = truncate_colormap(cmap, 0.0, 0.5)# 截取颜色映射的一部分,即把0-0.5的区域用蓝色映射
    pcm = ax.pcolormesh(tmp_x0, tmp_x1, z,
                   norm=cm.colors.Normalize(vmin=0, vmax=1), # 归一化颜色值
                   cmap=new_cmap, shading='nearest', alpha = 0.9) # 绘制颜色填充图
    ax.figure.colorbar(pcm, ax=ax)# 添加颜色条,显示颜色与预测概率值的对应关系,帮助解释颜色填充图。

输出层结果可视化:

plt_output_unit(W2,b2)

由于输出层的输入是三个神经元,所以用三维图形展示

pcm = ax.scatter(x, y, z, c=d, cmap=cmap, alpha = 1 )
#cmap 是 'Blues' 颜色映射,它将 d 中的值映射到蓝色调的颜色范围。具体来说:较小的值会映射到较浅的蓝色。较大的值会映射到较深的蓝色。

训练结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值