赞
踩
在这个实验室中,我们将使用Tensorflow构建一个小型神经网络
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 = load_coffee_data();
print(X.shape, Y.shape)
让我们在下面绘制咖啡烘焙数据。这两个功能是以摄氏度为单位的温度和以分钟为单位的持续时间。在家烤咖啡建议时间最好保持在12到15分钟之间,而温度应该在175到260摄氏度之间。当然,随着温度的升高,持续时间应该会缩短。
plt_roast(X,Y)
如果数据被标准化,将权重与数据拟合(反向传播,将在下周的讲座中介绍)将更快地进行。这与您在课程1中使用的过程相同,其中数据中的每个特征都被标准化为具有相似的范围。下面的过程使用Keras规范化层。它有以下步骤:
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}")
平铺/复制我们的数据以增加训练集大小并减少训练时期的数量。
Xt = np.tile(Xn,(1000,1))
Yt= np.tile(Y,(1000,1))
print(Xt.shape, Yt.shape)
Model
让我们构建讲座中描述的“咖啡烘焙网络”。有两层Sigmoid激活,如下所示:
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')
]
)
注1:tf.keras.input(shape=(2,)),指定输入的预期形状。这允许Tensorflow在这一点上调整权重和偏置参数的大小。这在探索Tensorflow模型时非常有用。在实践中可以省略此语句,当在model.fit语句中指定输入数据时,Tensorflow将调整网络参数的大小。
注2:在最后一层中包括S形激活不被视为最佳实践。相反,它会被计入损失中,从而提高数值稳定性。这将在稍后的实验室中进行更详细的描述。
model.summary()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。