【无标题】Tensorflow入门--图与会话

本文章所有内容均来自头歌实践教学平台,还望同学好好学习

第1关:Hello,Tensorflow

任务描述

本关任务:编写使用python一个Tensorlfow的Hello,World程序。
相关知识
为了完成本关任务,你需要掌握:

什么是TensorFlow
Hello,World程序编写
什么是TensorFlow
TensorFlow是一个采用数据流图(Data Flow Graphs),用于高性能数值计算的开源软件库。

Tensor(张量):即多维数组,是TensorFlow中数据表现的形式。Flow:基于数据流图(Data Flow Graphs)的计算。

Data Flow Graph用结点和线的有向图来描述数学计算。节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。如下图所示:

在这里插入图片描述

从图可以看到,Tensor从图的一端流动到另一端,这就是TensorFlow。

Hello,World程序编写

我们在学新框架的时候都喜欢学一下Hello,World。和其他Python库一样,想要使用它就需要导入它。如下代码可以导入Tensorflow:

import tensorflow as tf
接下来可以使用tf.constant()函数在图中创建一个常量Tensor。(PS:什么是图,在下一关中会介绍)

c = tf.constant(‘HelloWorld’)
图中有了Tensor之后,我们可以尝试让Tensor动起来(flow)。想让Tensor动起来就需要用到Session(**PS:什么是Session,在下一关中会介绍)。

创建一个Session

sess = tf.Session()

让c这个Tensor动起来,并打印c这个Tensor动起来之后的值

print(sess.run©)

关闭Session

sess.close()

编程要求

根据提示,在右侧编辑器补充代码,使用Tensorflow打印Hello World。

参考代码:

#********* Begin *********#
import tensorflow as tf

c = tf.constant('Hello World')
sess = tf.Session()
print(sess.run(c))
sess.close()


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

第2关:计算图与会话

参考代码:

# -*- coding: utf-8 -*-
import tensorflow as tf

def matmul(a,b):
    '''
    a(list):矩阵a
    b(list):矩阵b
    result(ndarray):矩阵相乘结果
    '''
    #********* Begin *********#
    # 矩阵相乘
    result = tf.matmul(a,b)
    # 创建会话
    sess = tf.Session()
    # 让这些数据动起来
    result = sess.run(result)
    #********* End *********#
    return result

第3关:Tensorflow实现线性回归

参考代码:

# -*- coding: utf-8 -*-
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*********#
    #首先需要创建两个tf.placeholder用来喂入数据特征与标签
    data = tf.placeholder(tf.float32, [None, 4])
    real_label = tf.placeholder(tf.float32, [None, 1])

    #然后再定义我们需要跟新的权重与偏置参数,需要用tf.Variable来定义
    weight = tf.Variable(tf.random_normal([4, 1]), dtype=tf.float32)
    bias = tf.Variable(tf.ones([1]), dtype=tf.float32)

    #定义线性回归模型y=wx+b
    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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值