• TensorFlow笔记四:从生成和保存模型 -> 调用使用模型


    TensorFlow常用的示例一般都是生成模型和测试模型写在一起,每次更换测试数据都要重新训练,过于麻烦,

    以下采用先生成并保存本地模型,然后后续程序调用测试。

    示例一:线性回归预测

    make.py

    import tensorflow as tf
    import numpy as np
    
    def train_model():
    
        # prepare the data
        x_data = np.random.rand(100).astype(np.float32)
        print (x_data)
        y_data = x_data * 0.1 + 0.2
        print (y_data)
    
        # define the weights
        W = tf.Variable(tf.random_uniform([1], -20.0, 20.0), dtype=tf.float32, name='w')
        b = tf.Variable(tf.random_uniform([1], -10.0, 10.0), dtype=tf.float32, name='b')
        y = W * x_data + b
    
        # define the loss
        loss = tf.reduce_mean(tf.square(y - y_data))
        train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
    
        # save model
        saver = tf.train.Saver(max_to_keep=4)
    
        with tf.Session() as sess:
    
            sess.run(tf.global_variables_initializer())
            print ("------------------------------------------------------")
            print ("before the train, the W is %6f, the b is %6f" % (sess.run(W), sess.run(b)))
    
            for epoch in range(300):
                if epoch % 10 == 0:
                    print ("------------------------------------------------------")
                    print ("after epoch %d, the loss is %6f" % (epoch, sess.run(loss)))
                    print ("the W is %f, the b is %f" % (sess.run(W), sess.run(b)))
                    saver.save(sess, "model/my-model", global_step=epoch)
                    print ("save the model")
                sess.run(train_step)
            print ("------------------------------------------------------")
    
            
    
    train_model()
    View Code

    test.py

    import tensorflow as tf
    import numpy as np
    
    
    def load_model():
        with tf.Session() as sess:
            saver = tf.train.import_meta_graph('model/my-model-290.meta')
            saver.restore(sess, tf.train.latest_checkpoint("model/"))
            print (sess.run('w:0'))
            print (sess.run('b:0'))
    load_model()
    View Code

    示例二:卷积神经网络

    make.py

    import tensorflow as tf
    import numpy as np
    import os
    os.mkdir("model1")
    def load_data(resultpath):
    
        datapath = os.path.join(resultpath, "data10_4.npz")
        if os.path.exists(datapath):
            data = np.load(datapath)
            X, Y = data["X"], data["Y"]
        else:
            X = np.array(np.arange(30720)).reshape(10, 32, 32, 3)
            Y = [0, 0, 1, 1, 2, 2, 3, 3, 2, 0]
            X = X.astype('float32')
            Y = np.array(Y)
            np.savez(datapath, X=X, Y=Y)
            print('Saved dataset to dataset.npz.')
        print('X_shape:{}
    Y_shape:{}'.format(X.shape, Y.shape))
        return X, Y
    
    def define_model(x):
    
        x_image = tf.reshape(x, [-1, 32, 32, 3])
        print (x_image.shape)
    
        def weight_variable(shape):
            initial = tf.truncated_normal(shape, stddev=0.1)
            return tf.Variable(initial, name="w")
    
        def bias_variable(shape):
            initial = tf.constant(0.1, shape=shape)
            return tf.Variable(initial, name="b")
    
        def conv3d(x, W):
            return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
        def max_pool_2d(x):
            return tf.nn.max_pool(x, ksize=[1, 3, 3, 1], strides=[1, 3, 3, 1], padding='SAME')
    
        with tf.variable_scope("conv1"):  # [-1,32,32,3]
            weights = weight_variable([3, 3, 3, 32])
            biases = bias_variable([32])
            conv1 = tf.nn.relu(conv3d(x_image, weights) + biases)
            pool1 = max_pool_2d(conv1)  # [-1,11,11,32]
    
        with tf.variable_scope("conv2"):
            weights = weight_variable([3, 3, 32, 64])
            biases = bias_variable([64])
            conv2 = tf.nn.relu(conv3d(pool1, weights) + biases)
            pool2 = max_pool_2d(conv2) # [-1,4,4,64]
    
        with tf.variable_scope("fc1"):
            weights = weight_variable([4 * 4 * 64, 128]) # [-1,1024]
            biases = bias_variable([128])
            fc1_flat = tf.reshape(pool2, [-1, 4 * 4 * 64])
            fc1 = tf.nn.relu(tf.matmul(fc1_flat, weights) + biases)
            fc1_drop = tf.nn.dropout(fc1, 0.5) # [-1,128]
    
        with tf.variable_scope("fc2"):
            weights = weight_variable([128, 4])
            biases = bias_variable([4])
            fc2 = tf.matmul(fc1_drop, weights) + biases # [-1,4]
    
        return fc2
    
    def train_model():
    
        x = tf.placeholder(tf.float32, shape=[None, 32, 32, 3], name="x")
        y_ = tf.placeholder('int64', shape=[None], name="y_")
    
        initial_learning_rate = 0.001
        y_fc2 = define_model(x)
        y_label = tf.one_hot(y_, 4, name="y_labels")
    
        loss_temp = tf.losses.softmax_cross_entropy(onehot_labels=y_label, logits=y_fc2)
        cross_entropy_loss = tf.reduce_mean(loss_temp)
    
        train_step = tf.train.AdamOptimizer(learning_rate=initial_learning_rate, beta1=0.9, beta2=0.999,
                                            epsilon=1e-08).minimize(cross_entropy_loss)
    
        correct_prediction = tf.equal(tf.argmax(y_fc2, 1), tf.argmax(y_label, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    
        # save model
        saver = tf.train.Saver(max_to_keep=4)
        tf.add_to_collection("predict", y_fc2)
    
    
        with tf.Session() as sess:
    
            sess.run(tf.global_variables_initializer())
            print ("------------------------------------------------------")
            X, Y = load_data("model1/")
            X = np.multiply(X, 1.0 / 255.0)
            for epoch in range(190):
    
                if epoch % 10 == 0:
                    print ("------------------------------------------------------")
    
                    train_accuracy = accuracy.eval(feed_dict={x: X, y_: Y})
                    train_loss = cross_entropy_loss.eval(feed_dict={x: X, y_: Y})
    
                    print ("after epoch %d, the loss is %6f" % (epoch, train_loss))
                    print ("after epoch %d, the acc is %6f" % (epoch, train_accuracy))
    
                    saver.save(sess, "model1/my-model", global_step=epoch)
                    print ("save the model")
    
                train_step.run(feed_dict={x: X, y_: Y})
    
            print ("------------------------------------------------------")
    
    
    train_model()
    View Code

    test.py

    import tensorflow as tf
    import numpy as np
    import os
    
    def load_model():
    
        # prepare the test data
        X = np.array(np.arange(6144, 12288)).reshape(2, 32, 32, 3)
        Y = [3, 1]
        Y = np.array(Y)
        X = X.astype('float32')
        X = np.multiply(X, 1.0 / 255.0)
        with tf.Session() as sess:
    
            # load the meta graph and weights
            saver = tf.train.import_meta_graph('model1/my-model-180.meta')
            saver.restore(sess, tf.train.latest_checkpoint("model1/"))
    
            # get weights
            graph = tf.get_default_graph()
            fc2_w = graph.get_tensor_by_name("fc2/w:0")
            fc2_b = graph.get_tensor_by_name("fc2/b:0")
    
            print ("------------------------------------------------------")
            print (sess.run(fc2_w))
            print ("#######################################")
            print (sess.run(fc2_b))
            print ("------------------------------------------------------")
    
            input_x = graph.get_operation_by_name("x").outputs[0]
    
            feed_dict = {"x:0":X, "y_:0":Y}
            y = graph.get_tensor_by_name("y_labels:0")
            yy = sess.run(y, feed_dict)
            print (yy)
            print ("the answer is: ", sess.run(tf.argmax(yy, 1)))
            print ("------------------------------------------------------")
    
            pred_y = tf.get_collection("predict")
            pred = sess.run(pred_y, feed_dict)[0]
            print (pred, '
    ')
    
            pred = sess.run(tf.argmax(pred, 1))
            print ("the predict is: ", pred)
            print ("------------------------------------------------------")
    
    
    load_model()
    View Code
  • 相关阅读:
    虚拟机安装Ubuntu 18.04.1 LTS教程
    Ubuntukylin-16.04.4设置root用户自动登陆
    git 删除本地分支,远程分支,创建tag
    elementui多选后无法再选择或者取消
    git分支改名oldName改为newName
    js前端流的方式下载execl
    vue实现网页导出pdf
    vue下载图片
    js原生方法 document.execCommand实现复制
    js原生方法 document.execCommand实现复制
  • 原文地址:https://www.cnblogs.com/dzzy/p/10756098.html
Copyright © 2020-2023  润新知