大话Tensorflow2.0(二):全连接神经网络结构

大话Tensorflow2.0(二):全连接神经网络结构

第一个全连接神经网络结构的代码复现

通过代码整个流程的理解,大致是建立了一个全连接的网络神经结构,输入的一个长度为784的张量,网络包含两个隐藏层,每个隐藏层包含64个结点,最后的输出层包含10个节点。

import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

from tensorflow import keras
from tensorflow.keras import layers

# 定义输入的是一个为长度为784的张量
inputs = keras.Input(shape=(784,), name='digits')
# 第1层包含64个节点,采用relu激活函数
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
# 第2层包含64个节点,采用relu激活函数
x = layers.Dense(64, activation='relu', name='dense_2')(x)
# 输出层采用softmax函数进行处理,得到最终的预测结果
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)
# 实例化模型
model = keras.Model(inputs=inputs, outputs=outputs)

# x_train y_train和 x_test y_test分别载入了 60,000 和 10,000 张大小为 28*28 的手写体数字图片
# x为输入,y为输出
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# MNIST中的图像默认为uint8(0-255的数字)。以下代码将其归一化到0-1之间的浮点数
x_train = x_train.reshape(60000, 784).astype('float32') / 255
x_test = x_test.reshape(10000, 784).astype('float32') / 255
# 由于输出经过softmax处理已经是0-1之间的浮点数,将其转为浮float32点数,统一浮点数
y_train = y_train.astype('float32')
y_test = y_test.astype('float32')

# 这里相当于将训练集分为两部分,一部分50000个用于训练
# 一部分(10000个数据)被保留用于验证
x_val = x_train[-10000:]
y_val = y_train[-10000:]
x_train = x_train[:-10000]
y_train = y_train[:-10000]

# 指定训练配置(优化函数,损失函数,评估)
model.compile(optimizer=keras.optimizers.RMSprop(),  # Optimizer
              # Loss function to minimize
              loss=keras.losses.SparseCategoricalCrossentropy(),
              # List of metrics to monitor
              metrics=[keras.metrics.SparseCategoricalAccuracy()])

# 通过将数据切成大小为64个批次,并反复迭代来训练整个数据集
print('开始导入数据,对创建的第一个模型进行训练')
result = model.fit(x_train, y_train,
                   batch_size=64,
                   epochs=3,
                   # 在每次迭代中加入验证集
                   validation_data=(x_val, y_val))

# history属性能够展现每次迭代(训练集和验证集)的交叉熵,以及准确率
print('\n result.history 字典内容 :', result.history)

# 使用训练集对该函数模型进行评估,返回值的值为交叉熵和准确率
print('\n 评估测试集的结果')
results = model.evaluate(x_test, y_test, batch_size=128)
print('测试集的交叉熵, 测试集的准确率:', results)

# 使用predict函数
# 根据测试集生成最后输出层十个结点的预测概率
print('\n 经过模型训练后,打印五个输出概率的例子')
predictions = model.predict(x_test[:5])
print(predictions)
print('\n 样例的形状大小:', predictions.shape)
开始导入数据,对创建的第一个模型进行训练
Train on 50000 samples, validate on 10000 samples
Epoch 1/3
50000/50000 [==============================] - 3s 61us/sample - loss: 0.3427 - sparse_categorical_accuracy: 0.9030 - val_loss: 0.1717 - val_sparse_categorical_accuracy: 0.9523
Epoch 2/3
50000/50000 [==============================] - 2s 48us/sample - loss: 0.1590 - sparse_categorical_accuracy: 0.9521 - val_loss: 0.1317 - val_sparse_categorical_accuracy: 0.9604
Epoch 3/3
50000/50000 [==============================] - 3s 61us/sample - loss: 0.1138 - sparse_categorical_accuracy: 0.9659 - val_loss: 0.1179 - val_sparse_categorical_accuracy: 0.9684

result.history 字典内容 : {'loss': [0.3426578821802139, 0.15900296208143233, 0.11379028077363967], 'sparse_categorical_accuracy': [0.90298, 0.95212, 0.96594], 'val_loss': [0.17171175315380097, 0.13174966387748718, 0.11790141086876392], 'val_sparse_categorical_accuracy': [0.9523, 0.9604, 0.9684]}

评估测试集的结果
0000/1 [=======================================]
试集的交叉熵, 测试集的准确率: [0.12084398788884282, 0.9635]

经过模型训练后,打印五个输出概率的例子
[[3.17133271e-07 2.01679086e-07 1.91767787e-04 8.21962079e-04
  1.81705997e-10 1.46002526e-06 7.39513561e-10 9.98966455e-01
  1.70740645e-06 1.61036896e-05]
 [1.10389031e-08 1.36430506e-04 9.99815166e-01 4.38110583e-05
  5.87256535e-13 1.62982772e-07 1.60874251e-07 2.57644578e-12
  4.31606895e-06 3.27467166e-13]
 [3.43061256e-05 9.73996937e-01 5.65588707e-03 1.16891600e-03
  8.60710279e-04 3.87584558e-04 2.77850602e-04 1.32217836e-02
  3.75740835e-03 6.38560799e-04]
 [9.99940038e-01 7.90213284e-10 2.84513317e-05 1.66102552e-07
  4.41276597e-08 2.12409418e-06 1.91769664e-06 1.08328541e-05
  2.55990198e-08 1.64497469e-05]
 [1.20625791e-05 7.93989301e-08 5.64708353e-05 3.75024320e-06
  9.80681360e-01 3.32376258e-05 1.15452185e-05 4.67143051e-04
  1.86698508e-05 1.87157020e-02]]

 样例的形状大小: (5, 10) 评估测试集的结果

后面的还没复现,慢慢更新
参考资料
Tensorflow 深度学习算法原理与编程实战
简单粗暴 TensorFlow 2.0
Tensorflow官网

你可能感兴趣的:(大话Tensorflow2.0)