Tensorflow学习笔记(一)

Tensorflow学习笔记(一)

一:环境配置

1.Python(3.6)
2.Anaconda3(windows 2018.12): 清华镜像下载
3.tensorflow(1.9.0):配置清华镜像地址下载

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

4.VScode(1.39.1):Anaconda内置直接安装

二:常量、变量、占位符

  1. constant():定义常量(不可更改的张量)
  2. zeros([M,N],dtype):创建所有元素为0的张量
  3. ones([M,N],dtype):创建所有元素为1的张量
  4. fill([M,N],value,name):创建一个M行N列的矩阵,其中每一个值为value
  5. eye(size,dtype,name):创建一个大小为size的单位矩阵
  6. zeros_like():创建与现有Numpy数组或张量常量具有相同形状的全为0的张量常量
  7. ones_like():同上
  8. linspace(start,stop,num):在一定范围内生成一个从初值到终值等 差排布的序列,公差=(stop-start)/(num-1)
  9. range(start,limit,delta):从开始(,默认值=0)生成一个数字序列,增量为delta(默认值=1),直到终值(但不包括终值)
  10. random_normal([M,N],mean,stddev,dtype,seed,name):输出M行N列正态分布随机数组,mean为正态分布的均值,默认0;stddev为标准差,默认1;seed为一个整数,若固定seed值则每次产生的随机数结果一样,若设值为None则每次产生不一样的随机数。
  11. random_crop(value,[M,N],seed,name):随机的将张量裁剪为给定的大小
  12. Variable():变量通常在神经网络中表示权重和偏置,必须显式初始化所有的声明变量,intial_op=tf.global_variables_initializer().
  13. placeholder(dtype,shape,name):将数据提供给计算图,也是一种常量。dtype定义占位符的数据类型,必须在声明时指定。值在用户调用run方法时传递。
  14. cast(x,dtype,name):将x的数据格式转化为dtype数据类型

运用

1.常量、变量运用

import tensorflow as tf

data1=tf.constant(2,dtype=tf.int32)#定义常量
data2=tf.Variable(10,name='var')#定义变量
'''
sess=tf.Session()
print(sess.run(data1))
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(data2))
sess.close()
'''
init=tf.global_variables_initializer()#变量一定要初始化
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(data2))

2.占位符运用

import tensorflow as tf

data1=tf.placeholder(tf.float32)
data2=tf.placeholder(tf.float32)
dataAdd=tf.add(data1,data2)
with tf.Session() as sess:
   print(sess.run(dataAdd,feed_dict={data1:6,data2:2}))
   #feed_dict={第一个参数:值,第二个参数:值},此为必需。
print('end!')

三:运算法则

  1. add():加法
  2. multiply():乘法
  3. subtract():减法
  4. divide():除法
  5. matmul():矩阵乘法
  6. scalar_mul(scalar,x):scalar为标量,x为张量,返回scalar*x.
  7. assign(ref,value):把value的值赋给ref
  8. eval():计算图执行的方式,等效于session.run()。但eval只能用于Tensor类对象,也就是有输出的Operation.

运用

import tensorflow as tf

data1=tf.constant(6)
data2=tf.Variable(2)
dataAdd=tf.add(data1,data2)#加法
dataCopy=tf.assign(data2,dataAdd)#dataAdd的值赋给data2
dataMul=tf.multiply(data1,data2)#乘法
dataSub=tf.subtract(data1,data2)#减法
dataDiv=tf.divide(data1,data2)#除法
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(dataAdd))
    print(sess.run(dataMul))
    print(sess.run(dataSub))
    print(sess.run(dataDiv))
    print('sess.run(dataCopy)',sess.run(dataCopy))#8->data2
    print('dataCopy.eval()',dataCopy.eval())#8+6=14 ->data2
    print('tf.get_default_session()',tf.get_default_session().run(dataCopy))#14+6=20 ->data2
print('end!')

四:应用(人工神经网络实现股票收盘价预测)

  1. 实现目标:输入15天的股票开盘价和收盘价。预测股票收盘价格。

  2. 人工神经网络图示解说
    在这里插入图片描述
    输入:日期
    输出:当日股价
    计算公式:
    在这里插入图片描述
    W1,W2:权重矩阵; b1,b2:偏置矩阵

  3. 代码实现

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

date=np.linspace(0,14,15)
endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08])
beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40])
plt.figure()
for i in range(0,15):
    dateOne=np.zeros([2])#x轴坐标(日期)
    dateOne[0]=i
    dateOne[1]=i
    priceOne=np.zeros([2])#y轴坐标(当天的开盘价和收盘价)
    priceOne[0]=beginPrice[i]
    priceOne[1]=endPrice[i]
    if endPrice[i]>beginPrice[i]:
        plt.plot(dateOne,priceOne,'r',lw=8)#红色代表股票上涨
    else:
        plt.plot(dateOne,priceOne,'g',lw=8)#绿色代表股票下跌
# plt.show()
#计算公式及其中的维度变化
# A(15x1)*w1(1x10)+b1(1x10)=B(15x10)
# B(15x10)*w2(10x1)+b2(15x1)=C(15x1)
dateNormal=np.zeros([15,1])
priceNormal=np.zeros([15,1])
for i in range(0,15):
    dateNormal[i,0]=i/14.0
    priceNormal[i,0]=endPrice[i]/3000.0

x=tf.placeholder(tf.float32,[None,1])#表明为N行1列,x为输入值
y=tf.placeholder(tf.float32,[None,1])#y为真实值
#隐藏层B
w1=tf.Variable(tf.random_uniform([1,10],0,1))
b1=tf.Variable(tf.zeros([1,10]))
wb1=tf.matmul(x,w1)+b1
layer1=tf.nn.relu(wb1)#激活函数
#输出层C
w2=tf.Variable(tf.random_uniform([10,1],0,1))
b2=tf.Variable(tf.zeros([15,1]))
wb2=tf.matmul(layer1,w2)+b2
layer2=tf.nn.relu(wb2)

loss=tf.reduce_mean(tf.square(y-layer2))#损失:计算真实值y与计算值layer2的标准差
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)#训练目标:使用梯度下降法减小损失,实质就是不断调整W和b
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(0,10000):#训练10000次后终止
        sess.run(train_step,feed_dict={x:dateNormal,y:priceNormal})
    pred=sess.run(layer2,feed_dict={x:dateNormal})#预测
    predPrice=np.zeros([15,1])
    for i in range(0,15):
        predPrice[i,0]=(pred*3000)[i,0]
    plt.plot(date,predPrice,'b',lw=1)

plt.show()

4.方法概述:隐藏层B中输入x,通过w1,b1,得到 layer1;再输入 layer1,通过w2,b2,得到 layer2;并计算损失,及计算真实值和layer2的标准差。使用梯度下降法减小损失,共计训练10000次。

5.实现结果
股票收盘价格预测结果

补充

上述公式中A(15x1)*w1(1x10)+b1(1x10)=B(15x10)
A *w1 与 b1的维度不同但可相加,是因为运用了numpy的广播机制。

numpy广播机制:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

  1. 数组维度不同,后缘维度的轴长相符。
    在这里插入图片描述
  2. 数组维度相同,其中有个轴为1。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值