【06】tensorflow使用线性回归预测肥胖

# 使用线性回归预测肥胖
# 1、导入相应的包
import tensorflow as tf

# 2、定义权重和偏置
W = tf.Variable(tf.zeros([2,1]),name="weights")
b = tf.Variable(0.,name="bias")

# 3、定义拟合关系,这里为线性函数
def inference(X):
    return tf.matmul(X,W) + b

# 4、定义损失函数
def loss(X,Y):
    # 获取预测值,并将其转化为一个列向量
    Y_predicted = tf.transpose(inference(X),name="get_Y_predicted")
    # 对两个向量对应的值求均方误差并累计求和计算损失返回
    return tf.reduce_sum(tf.squared_difference(Y,Y_predicted))

# 5、定义数据源
# Data from http://people.sc.fsu.edu/~jburkardt/datasets/regression/x09.txt
def inputs():
    weight_age = [[84, 46], [73, 20], [65, 52], [70, 30], [76, 57], [69, 25], [63, 28], [72, 36], [79, 57], [75, 44],
                  [27, 24], [89, 31], [65, 52], [57, 23], [59, 60], [69, 48], [60, 34], [79, 51], [75, 50], [82, 34],
                  [59, 46], [67, 23], [85, 37], [55, 40], [63, 30]]
    blood_fat_content = [354, 190, 405, 263, 451, 302, 288, 385, 402, 365, 209, 290, 346, 254, 395, 434, 220, 374, 308,
                         220, 311, 181, 274, 303, 244]
    # 将数值转化为浮点类型并返回
    return tf.to_float(weight_age),tf.to_float(blood_fat_content)

# 6、定义训练参数及训练方法
def train(total_loss):
    # 定义学习率
    learning_rate = 0.000005
    return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss)

# 7、评估验证
def evaluate(sess, X, Y):
    print(sess.run(inference([[50., 20.]]))) # ~ 303
    print(sess.run(inference([[50., 70.]]))) # ~ 256
    print(sess.run(inference([[90., 20.]]))) # ~ 303
    print(sess.run(inference([[90., 70.]]))) # ~ 256

# Launch the graph in a session, setup boilerplate
with tf.Session() as sess:
    # 初始化所有变量
    tf.global_variables_initializer().run()
    # 获得输入特征与标签值向量
    X, Y = inputs()
    # 计算损失
    total_loss = loss(X, Y)
    # 执行训练
    train_op = train(total_loss)
    # 创建一个协调器,管理线程
    coord = tf.train.Coordinator()
    # 启动QueueRunners, 此时文件名队列已经进队。
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    # 定义循环次数
    training_steps = 100000
    try:
        for step in range(training_steps):
            sess.run([train_op])
            if step % 1000 == 0:
                print("Epoch:", step, " loss: ", sess.run(total_loss))

        print("Final model W=", sess.run(W), "b=", sess.run(b))
    except Exception as e:
        # 将异常抛给coordinator,通知线程停止
        coord.request_stop(e)
    finally:
        # 模型评估
        evaluate(sess, X, Y)
        # 请求该线程停止
        coord.request_stop()
        # 等待被指定的线程终止
        coord.join(threads)
    sess.close()



猜你喜欢

转载自blog.csdn.net/yeler082/article/details/80023026