Tensorflow入门-图与会话

TensorFlow入门

提示:来自头歌实践平台,仅供参考,希望大家自己认真练习



前言

什么是TensorFlow?

  • TensorFlow是一个采用数据流图(Data Flow Graphs),用于高性能数值计算的开源软件库。
  • Tensor(张量):即多维数组,是TensorFlow中数据表现的形式。Flow:基于数据流图(Data Flow Graphs)的计算
  • Data Flow
    Graph用结点和线的有向图来描述数学计算。节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。

提示:以下是本篇文章正文内容,下面案例可供参考

一、TensorFlow入门-图与会话

任务描述:

  • 本关任务:编写使用python一个Tensorlfow的Hello,World程序。
  • 测试输入:
  • 预期输出:b’Hello World’
#********* Begin *********#

import tensorflow as tf
# 创建一个Session
sess = tf.Session()
c = tf.constant("Hello World")
# 让c这个Tensor动起来,并打印c这个Tensor动起来之后的值
print(sess.run(c))
# 关闭Session
sess.close()

#********* End *********#

二、计算图与会话

在这里插入图片描述

节点:

  • 常量节点tf.constant:它的value值可以为一个数值也可以为一个列表
  • 变量节点tf.Variable:它可以用来存储图执行过程中需要更新的量,在神经网络中用来储存权重值
  • 占位节点tf.placeholder:placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存
    会话:

如何传播会话?

# 1、方法一
sess = tf.Session()
print(sess.run(y))
# 关闭会话释放资源
sess.close()

# 2、方法二
# 上下文结束时资源会自动释放
with tf.Session() as sess:
    print(sess.run(y))

编程要求:
根据提示,在右侧编辑器补充代码,实现matmul方法。其中:

  • a(list):你需要将它转为相应的数据类型
  • b(list):你需要将它转为相应的数据类型
  • result(ndarray):矩阵相乘后的结果

测试说明:
程序会调用你实现的方法对输入数据进行矩阵乘法,如:

  • 输入:[[[1,2],[3,4],[5,6]], [[1,2,3],[4,5,6]]]
  • 输出: [[ 9 12 15] [19 26 33] [29 40 51]]
import tensorflow as tf

def matmul(a,b):
    '''
    a(list):矩阵a
    b(list):矩阵b
    result(ndarray):矩阵相乘结果
    '''
    #********* Begin *********#
    # result=tf.Variable(tf.constant(()),name='result')
    # a=tf.constant(a)
    # b=tf.constant(b)
    result=tf.matmul(a,b)
    sess=tf.Session()
    result=sess.run(result)
    #********* End *********#
    return result

三、Tensorflow实现线性回归

线性回归:

  • 简单线性回归
    模型:y=wx+b
    其中x表示特征值(如:体重值),w表示权重,b表示偏置,y表示标签(如:身高值)。
  • 多元线性回归
    模型:y=b+w1x1+w2x2+…+wnxn
    其中x i 表示第i个特征值,w i表示第i个特征对应的权重,b表示偏置,y表示标签
  • 线性回归模型训练流程图

在这里插入图片描述

编程要求:

  • 根据提示,在右侧编辑器补充代码,实现线性回归方法预测股票。

测试说明:

  • 程序会调用你实现的方法对股票数据进行预测,若测试集上的损失值低于阈值,则视为通关。

import math
import numpy as np
import pandas as pd
from sklearn.preprocessing import scale
import tensorflow as tf
def preprocess_data(df):
    '''
    df(DataFrame):原始数据
    X(ndarray):处理后数据特征
    y(ndarray):处理后数据标签
    '''
    #*********Bengin*********#
    # 定义预测列变量,它存放研究对象的标签名
    forecast_col = 'Adj. Close'
    # 定义预测天数,这里设置为所有数据量长度的1%
    forecast_out = int(math.ceil(0.1*len(df)))
    
    # 只用到df中下面的几个字段['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']
    df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']]
    # 构造两个新的列
    # HL_PCT为股票最高价与最低价的变化百分比
    df['HL_PCT'] = (df['Adj. High'] - df['Adj. Close']) / df['Adj. Close'] * 100.0
    # HL_PCT为股票收盘价与开盘价的变化百分比
    df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0
    # 下面为真正用到的特征字段['Adj. Close', 'HL_PCT', 'PCT_change', 'Adj. Volume']
    df = df[['Adj. Close', 'HL_PCT', 'PCT_change', 'Adj. Volume']]
    # 因为scikit-learn并不会处理空数据,需要把为空的数据都设置为一个比较难出现的值,这里取-9999,
    df.fillna(-99999, inplace=True)
    # 用label代表该字段,是预测结果
    df['label'] = df[forecast_col].shift(-forecast_out)
    #构造X
    X = np.array(df.drop(['label'], 1))   
    X = scale(X)
    X = X[:-forecast_out]
    # 抛弃label列中为空的那些行
    df.dropna(inplace=True)
    y = np.array(df['label'])
    #将标签reshape成(-1,1)
    y = y.reshape(-1,1)
    #*********End*********#
    return X,y
def tf_predict(sess,train_data,train_label,test_data,lr,n_iters):
    '''
    sess:tf.Session创建的会话
    train_data(ndarray):训练数据
    train_label(ndarray):训练标签
    test_data(ndarray):测试数据
    lr(float):学习率
    n_iters(int):训练轮数
    test_predict(ndarray):测试集预测标签
    '''
    #*********Bengin*********#
    data = tf.placeholder(tf.float32, [None, 4])
    real_label = tf.placeholder(tf.float32, [None, 1])
    weight = tf.Variable(tf.random_normal([4, 1]), dtype=tf.float32)
    bias = tf.Variable(tf.ones([1]), dtype=tf.float32)
    y_label = tf.add(tf.matmul(data, weight), bias)
    loss = tf.reduce_mean(tf.square(real_label - y_label))
    train = tf.train.AdamOptimizer(lr).minimize(loss)
    sess.run(tf.global_variables_initializer())
    for i in range(n_iters):
        sess.run(train,feed_dict={
    
    data: train_data, real_label: train_label})    
    test_predict = sess.run(y_label,feed_dict={
    
    data: test_data})
    sess.close()

    #*********End*********#
    return test_predict

总结

本文题型转载头歌实践平台仅供参考,希望大家自己多加练习,共同进步

猜你喜欢

转载自blog.csdn.net/Alan_King79/article/details/122600649