通过KerasModel创建模型

本文介绍通过tf.keras.Model(inputs=input_x, outputs=pred_y),关系模型的输入、输出,建立任意模型结构的深度学习模型。

一、模型结构信息流图

模型结构图

二、导入依赖包

# coding: utf-8
import tensorflow as tf
from tensorflow.keras import layers
import numpy as np
import os

三、导入或者生成模型输入数据

#训练数据导入
trin_in = np.random.random((500, 128))
trin_out = np.random.random((500, 13))
dataset = tf.data.Dataset.from_tensor_slices((trin_in, trin_out))
dataset = dataset.batch(100)
dataset = dataset.repeat()
#验证数据导入
val_in = np.random.random((200, 128))
val_out = np.random.random((200, 13))
val_dataset = tf.data.Dataset.from_tensor_slices((val_in, val_out))
val_dataset = val_dataset.batch(50)
val_dataset = val_dataset.repeat()

四、配置模型信息流结构

#配置模型样式
input_x = tf.keras.Input(shape=(128,))
#正则化可选参数:regularizers.l1(0.03)、regularizers.l2(0.02)、regularizers.l1_l2(l1=0.01, l2=0.04)
layer_1 = layers.Dense(384, activation='tanh',
                       kernel_initializer='RandomUniform',
                        kernel_regularizer =tf.keras.regularizers.l2(0.02),
                       bias_initializer="RandomNormal",
                       bias_regularizer=tf.keras.regularizers.l1(0.03),
                       name='layer_1')(input_x)
layer_2 = layers.Dense(128, activation='elu', name='layer_2')(layer_1)
layer_3 = layers.Dense(64, activation='softplus',name='layer_3')(layer_2+input_x)#任意网络图形,注意:维度
pred_y = layers.Dense(13, activation='softmax',
                        activity_regularizer=tf.keras.regularizers.l1(0.01),
                        kernel_initializer='GlorotUniform',
                        kernel_regularizer =tf.keras.regularizers.l1_l2(l1=0.01, l2=0.04),
                        bias_initializer="Ones",
                        name='layer_out')(layer_3)
model = tf.keras.Model(inputs=input_x, outputs=pred_y)

五、配置tensorboard可视化

#配置tensorboard可视化
logdir = 'tensorboardLogs'
if not os.path.exists(logdir):
    os.mkdir(logdir)
output_model_file = os.path.join(logdir, "MySecondModel.h5")
callbacks = [
    # 打开CMD密令窗口,输入:tensorboard --logdir "./tensorboardLogs"启动可视化网页
    tf.keras.callbacks.TensorBoard(log_dir=logdir),# 定义TensorBoard对象, histogram_freq=1
    tf.keras.callbacks.ModelCheckpoint(output_model_file,save_best_only = True),#模型保存配置
    tf.keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3),#模型提前停止条件
]

六、模型编译和训练

#模型编译
model.compile(
optimizer=tf.keras.optimizers.RMSprop(0.05),#学习率
loss=tf.keras.losses.categorical_crossentropy,#
 metrics=['accuracy'])
#模型拟合
model.fit(dataset, epochs=5, steps_per_epoch=30,
        validation_data=val_dataset, validation_steps=3,
        callbacks=callbacks)

七、训练打印信息

Train for 30 steps, validate for 3 steps
Epoch 1/5

2020-07-22 20:58:20.428441: I tensorflow/core/profiler/lib/profiler_session.cc:184] Profiler session started.
 1/30 [>.............................] - ETA: 38s - loss: 25.6076 - accuracy: 0.0400
WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (0.111702). Check your callbacks.
 2/30 [=>............................] - ETA: 21s - loss: 113.4014 - accuracy: 0.0750
13/30 [============>.................] - ETA: 2s - loss: 843009.6592 - accuracy: 0.0815
25/30 [========================>.....] - ETA: 0s - loss: 1638163.0178 - accuracy: 0.0824
30/30 [==============================] - 2s 69ms/step - loss: 1890052.1565 - accuracy: 0.0840 - val_loss: 2783116.2500 - val_accuracy: 0.0667
Epoch 2/5

 1/30 [>.............................] - ETA: 0s - loss: 2688977.5000 - accuracy: 0.0600
10/30 [=========>....................] - ETA: 0s - loss: 6145043.2250 - accuracy: 0.0690
22/30 [=====================>........] - ETA: 0s - loss: 6733185.3750 - accuracy: 0.0764
30/30 [==============================] - 0s 8ms/step - loss: 7063126.7583 - accuracy: 0.0747 - val_loss: 11274707.6667 - val_accuracy: 0.0933
Epoch 3/5

 1/30 [>.............................] - ETA: 0s - loss: 11241677.0000 - accuracy: 0.0900
10/30 [=========>....................] - ETA: 0s - loss: 12574605.9500 - accuracy: 0.0670
21/30 [====================>.........] - ETA: 0s - loss: 13925799.1190 - accuracy: 0.0714
30/30 [==============================] - 0s 7ms/step - loss: 14864912.3167 - accuracy: 0.0723 - val_loss: 24675306.6667 - val_accuracy: 0.1200
Epoch 4/5

 1/30 [>.............................] - ETA: 0s - loss: 24482984.0000 - accuracy: 0.0500
12/30 [===========>..................] - ETA: 0s - loss: 19740043.4167 - accuracy: 0.0900
23/30 [======================>.......] - ETA: 0s - loss: 21752499.1739 - accuracy: 0.0870
30/30 [==============================] - 0s 7ms/step - loss: 23650425.7000 - accuracy: 0.0850 - val_loss: 29904261.3333 - val_accuracy: 0.0667
Epoch 5/5

 1/30 [>.............................] - ETA: 0s - loss: 29330360.0000 - accuracy: 0.0600
12/30 [===========>..................] - ETA: 0s - loss: 31070796.6667 - accuracy: 0.0592
16/30 [===============>..............] - ETA: 0s - loss: 32206105.0000 - accuracy: 0.0637
24/30 [=======================>......] - ETA: 0s - loss: 32991959.0833 - accuracy: 0.0729
30/30 [==============================] - 0s 12ms/step - loss: 34828229.5333 - accuracy: 0.0740 - val_loss: 31032930.0000 - val_accuracy: 0.0600

八、查看tensorboard可视化

在项目路径中输入cmd,在cmd中输入tensorboard --logdir "./tensorboardLogs"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、查看可视化信息

在网页中输入http://localhost:6006/ ,建议使用360浏览器,反正我的火狐浏览器看不了profile。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、模型预测

# coding: utf-8
import tensorflow as tf
import numpy as np
import os
#预测数据准备
pre_in = np.random.random((10, 128))
logdir = 'tensorboardLogs'
input_model = os.path.join(logdir, "MySecondModel.h5")
# 导入模型
model = tf.keras.models.load_model(input_model)#
# 预测
result = model.predict(pre_in, batch_size=32)
print(result)

十一、预测结果

[[0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脚踏南山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值