第一节,tensorflow基础构架
1、tensorflow结构
import tensorflow as tf
import numpy as np
import numpy as np
#create data
x_data=np.random.rand(100).astype(np.float32)
y_data=x_data*0.1+0.3 定义线性方程
x_data=np.random.rand(100).astype(np.float32)
y_data=x_data*0.1+0.3 定义线性方程
#create tensorflow structure
Weights=tf.Variable(tf.random_uniform([1],-1.0,1.0)) #一维,范围[-1,1]
biases=tf.Variable(tf.zeros([1]))
Weights=tf.Variable(tf.random_uniform([1],-1.0,1.0)) #一维,范围[-1,1]
biases=tf.Variable(tf.zeros([1]))
y=Weights*x_data+biases
loss=tf.reduce_mean(tf.square(y-y_data))
#建立优化器,减小误差,提高参数准确度,每次迭代都会优化
optimizer=tf.train.GradientDescentOptimizer(0.5) #学习效率<1
train=optimizer.minimize(loss)
optimizer=tf.train.GradientDescentOptimizer(0.5) #学习效率<1
train=optimizer.minimize(loss)
#初始化变量,定义的变量必须初始化,
init=tf.global_variables_initializer()
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
#train
for step in range(201):
sess.run(train)
if step%20==0:
print(step,sess.run(Weights),sess.run(biases))
sess.run(init)
#train
for step in range(201):
sess.run(train)
if step%20==0:
print(step,sess.run(Weights),sess.run(biases))
运行结果:
Weights趋于0.1,biases趋于0.3.
2、Session 必须开启会话才能输出结果
import tensorflow as tf
matrix1 = tf.constant([[3, 3]])
matrix2 = tf.constant([[2], [2]])
matrix2 = tf.constant([[2], [2]])
# matrix multiply矩阵相乘
# np.dot(m1,m2)
product = tf.matmul(matrix1, matrix2)
# np.dot(m1,m2)
product = tf.matmul(matrix1, matrix2)
# # method 1
# sess = tf.Session() # Session是一个object,首字母要大写
# # 只有sess.run()之后,tensorflow才会执行一次
# result = sess.run(product)
# print(result)
# # close 不影响,会显得更整洁
# sess.close()
# sess = tf.Session() # Session是一个object,首字母要大写
# # 只有sess.run()之后,tensorflow才会执行一次
# result = sess.run(product)
# print(result)
# # close 不影响,会显得更整洁
# sess.close()
# method 2
# with 可以自己关闭会话
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)
# with 可以自己关闭会话
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)
3、Variable变量
定义变量,变量必须激活
init=tf.global_variables_initializer()
4、placeholder传入值
运行到sess.run()
的时候再给输入
利用feed_dict
绑定
# 给定type,tf大部分只能处理float32数据
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
# Tensorflow 1.0 修改版
# tf.mul---tf.multiply
# tf.sub---tf.subtract
# tf.neg---tf.negative
output = tf.multiply(input1, input2)
# tf.mul---tf.multiply
# tf.sub---tf.subtract
# tf.neg---tf.negative
output = tf.multiply(input1, input2)
with tf.Session() as sess:
# placeholder在sess.run()的时候传入值
print(sess.run(output, feed_dict={input1: [7.], input2: [2.]}))
5、激励函数
# placeholder在sess.run()的时候传入值
print(sess.run(output, feed_dict={input1: [7.], input2: [2.]}))
5、激励函数
简单的神经网络一般可以使用任何激励函数;
复杂的神经网络不能随意选择,会造成梯度爆炸和梯度消失的问题;
卷积神经网络中推荐使用relu激励函数;循环神经网络RNN:relu or tanh激励函数