tensorflow模型建立与训练

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow模型建立与训练相关的知识,希望对你有一定的参考价值。

参考技术A 多层感知机的模型类实现与上面的线性模型类似,使用 tf.keras.Model 和 tf.keras.layers 构建,所不同的地方在于层数增加了(顾名思义,“多层” 感知机),以及引入了非线性激活函数(这里使用了 ReLU 函数 , 即下方的 activation=tf.nn.relu )。该模型输入一个向量(比如这里是拉直的 1×784 手写体数字图片),输出 10 维的向量,分别代表这张图片属于 0 到 9 的概率。

这里,因为我们希望输出 “输入图片分别属于 0 到 9 的概率”,也就是一个 10 维的离散概率分布,所以我们希望这个 10 维向量至少满足两个条件:

自定义层需要继承 tf.keras.layers.Layer 类,并重写 __init__ 、 build 和 call 三个方法,如下所示:

自定义损失函数需要继承 tf.keras.losses.Loss 类,重写 call 方法即可,输入真实值 y_true 和模型预测值 y_pred ,输出模型预测值和真实值之间通过自定义的损失函数计算出的损失值。下面的示例为均方差损失函数:

自定义评估指标需要继承 tf.keras.metrics.Metric 类,并重写 __init__ 、 update_state 和 result 三个方法。下面的示例对前面用到的 SparseCategoricalAccuracy 评估指标类做了一个简单的重实现:

TensorFlow 同时调用多个预训练好的模型

在某些任务中,我们需要针对不同的情况训练多个不同的神经网络模型,这时候,在测试阶段,我们就需要调用多个预训练好的模型分别来进行预测。

弄明白了如何调用单个模型,其实调用多个模型也就顺理成章。我们只需要建立多个图,然后每个图导入一个模型,再针对每个图创建一个会话,分别进行预测即可。

import tensorflow as tf
import numpy as np

# 建立两个 graph
g1 = tf.Graph()
g2 = tf.Graph()

# 为每个 graph 建创建一个 session
sess1 = tf.Session(graph=g1)
sess2 = tf.Session(graph=g2)

X_1 = None
tst_1 = None
yhat_1 = None

X_2 = None
tst_2 = None
yhat_2 = None

def load_model(sess):
    """
        Loading the pre-trained model and parameters.
    """
    global X_1, tst_1, yhat_1
    with sess1.as_default():
        with sess1.graph.as_default():
            modelpath = r‘F:/resnet/model/new0.25-0.35/‘
            saver = tf.train.import_meta_graph(modelpath + ‘model-10.meta‘)
            saver.restore(sess1, tf.train.latest_checkpoint(modelpath))
            graph = tf.get_default_graph()
            X_1 = graph.get_tensor_by_name("X:0")
            tst_1 = graph.get_tensor_by_name("tst:0")
            yhat_1 = graph.get_tensor_by_name("tanh:0")
            print(‘Successfully load the model_1!‘)

            
def load_model_2():
    """
        Loading the pre-trained model and parameters.
    """
    global X_2, tst_2, yhat_2
    with sess2.as_default():
        with sess2.graph.as_default():
            modelpath = r‘F:/resnet/model/new0.25-0.352/‘
            saver = tf.train.import_meta_graph(modelpath + ‘model-10.meta‘)
            saver.restore(sess2, tf.train.latest_checkpoint(modelpath))
            graph = tf.get_default_graph()
            X_2 = graph.get_tensor_by_name("X:0")
            tst_2 = graph.get_tensor_by_name("tst:0")
            yhat_2 = graph.get_tensor_by_name("tanh:0")
            print(‘Successfully load the model_2!‘)
    
def test_1(txtdata):
    """
        Convert data to Numpy array which has a shape of (-1, 41, 41, 41, 3).
        Test a single axample.
        Arg:
                txtdata: Array in C.
        Returns:
            The normal of a face.
    """
    global X_1, tst_1, yhat_1
    data = np.array(txtdata)
    data = data.reshape(-1, 41, 41, 41, 3)
    output = sess1.run(yhat_1, feed_dict={X_1: data, tst_1: True})  # (100, 3)
    output = output.reshape(-1, 1)
    ret = output.tolist()
    return ret


def test_2(txtdata):
    """
        Convert data to Numpy array which has a shape of (-1, 41, 41, 41, 3).
        Test a single axample.
        Arg:
                txtdata: Array in C.
        Returns:
            The normal of a face.
    """
    global X_2, tst_2, yhat_2

    data = np.array(txtdata)
    data = data.reshape(-1, 41, 41, 41, 3)
    output = sess2.run(yhat_2, feed_dict={X_2: data, tst_2: True})  # (100, 3)
    output = output.reshape(-1, 1)
    ret = output.tolist()

    return ret

最后,本程序只是为了说明问题,抛砖引玉,代码有很多冗余之处,不要模仿!

获取更多精彩,请关注「seniusen」!
技术分享图片


以上是关于tensorflow模型建立与训练的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow 同时调用多个预训练好的模型

Tensorflow的训练流程和部署流程你知道吗?

在 TensorFlow 2.0 的自定义训练循环中应用回调

(转)Darknet模型与Tensorflow模型相互转换

面向大规模AI在线推理的可靠性设计

谷歌推出量子机器学习框架TFQ-TensorFlow Quantum,一个可训练量子模型的机器学习框架