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.常量、变量运用
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!')
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!')
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次。
上述公式中A(15x1)*w1(1x10)+b1(1x10)=B(15x10)
A *w1 与 b1的维度不同但可相加,是因为运用了numpy的广播机制。
numpy广播机制:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。