数据分析
在对数据尽心建模之前,我们需要先对数据的基本特性进行分析
- 输入数据的维度 : 一维;二维(是否需要卷积操作)
- 输入数据在每个维度的范围是否归一化处理了
- 对于图片信息,则显示图片,查看信息完整性 ( matplotlib.pyplt查看 )
import matplotlib.pyplot as plt
plt.figure()
plt.imshow( image0 )
plt.colorbar()
plt.grid(False)
plt.show()
模型建模
keras Sequential API
import tensorflow as tf
#### 建立模型的不同层
mode = tf.keras.models.Sequential([
tf.keras.layers.Flatten( input_shape=(28,28) ) ,
tf.keras.layers.Dense(128,activation='relu'),
tf.keras.layers.Dropout(0.2,),
tf.keras.layers.Dense(10,activation='softmax')
])
## 每一层的含义
tf.keras.layers.Flatten 会将二维数组转化为一维数组。
tf.keras.layers.Dense() 是全连接层,包含 神经元数量 与 激活函数
可选的 activation: 'tanh' ; 'relu' ; 'softmax' ; 'softplus' ; 'sigmoid'
activation 函数也可以不添加
tf.layers.dense(
inputs, #层的输入
units, #该层的输出维度
activation=None, #激活函数
use_bias=True,
kernel_initializer=None, # 卷积核的初始化器
bias_initializer=tf.zeros_initializer(), # 偏置项的初始化器
kernel_regularizer=None, # 卷积核的正则化
bias_regularizer=None, # 偏置项的正则化
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None, # 层的名字
reuse=None # 是否重复使用参数
)
检查模型:
model.summary()
编译模型
###### 损失函数,优化器, 指标(performance function)
model.compile( optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy']
)
optimizer
optimizer 既可以使用已经定义好的'adam', 也可以使用keras.optimizers类
1 'adam': keras.optimizers.Adam()
2. 'RMSprop':
tf.keras.optimizers.RMSprop(
learning_rate=0.001,
rho=0.9,
momentum=0.0,
epsilon=1e-07,
centered=False,
name="RMSprop")
rho: 过去梯度的比例 (动量)
3. 'sgd':
tf.keras.optimizers.SGD(
learning_rate=0.01, momentum=0.0, nesterov=False, name="SGD" )
loss
概率性loss
以下两个 label都是可以任意离散数值,数值的数量不设限制,但是 第一个是一维标签,第二个是多维标签
#BInaryCrossentropy loss:
loss_fn = tf.keras.losses.BinaryCrossentropy(
from_logits=False,
label_smoothing=0.0,
axis=-1,
reduction="auto",
name="binary_crossentropy"
)
from_Logits = False 表示 [0,1]输出 ; True 表示 [-inf,inf]输出
#CategoricalCrossentropy loss:
loss_fn = tf.keras.losses.CategoricalCrossentropy(
from_logits=False,
label_smoothing=0.0,
axis=-1,
reduction="auto",
name="categorical_crossentropy"
)
多label
离散整数标签:
#SparseCategoricalCrossentropy class
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(
from_logits=False, reduction="auto", name="sparse_categorical_crossentropy"
)
回归性 loss
#MSE
loss_fn = tf.keras.losses.MeanSquaredError()
#MAE
loss_fn = tf.keras.losses.MeanAbsoluteError()
Metrics
# MSE metrics
mse_metrics = tf.keras.metrics.MeanSquaredError()
rmse_metrics = tf.keras.metrics.RootMeanSquaredError(
name="root_mean_squared_error", dtype=None)
mae_metrics = tf.keras.metrics.MeanAbsoluteError(name="mean_absolute_error", dtype=None)
模型训练
#######模型训练
model.fit( train_images, train_labels, epochs=10 )
########对训练好的模型进行 评估
test_loss, test_acc = model.evaluate( test_images, test_labels, verbose=2 )
# 参数说明
verbose 是用于 日至说明
verbose = 0 不在标准输出流中输出日志信息,只返回 变量信息
verbose = 1 输出进度条记录
verbose = 2 没有进度条,只输出一行记录
模型预测
predictions = model.predict( test_data )
一般预测是对 一批数据进行预测,因此对单个数据进行预测时,我们需要将一个数据拓展维度
img = np.expand_dims(img,0)