import tensorflow as tf import numpy as np #create data 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])) y=Weights*x_data+biases loss=tf.reduce_mean(tf.square(y
-y_data))#建立优化器，减小误差，提高参数准确度，每次迭代都会优化 optimizer=tf.train
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))

import tensorflow as tf matrix1 = tf.constant([[3, 3]]) matrix2 = tf.constant(
[[2], [2]]) # matrix multiply # np.dot(m1,m2) product = tf.matmul(matrix1,
matrix2) # # method1 # sess = tf.Session() # Session是一个object，首字母要大写 # #

close 不影响，会显得更整洁 # sess.close() # method2 # with 可以自己关闭会话 with tf.Session() as
sess: result2 = sess.run(product)print(result2)

import tensorflow as tf state=tf.Variable(0,name='counter') # print(state.name)
updata=tf.assign(state,new_value)#变量必须要激活 init=tf.global_variables_initializer()
with tf.Session() as sess: sess.run(init) for _ in range(3): sess.run(updata)
print(sess.run(state))

import tensorflow as tf # 给定type，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) with tf.Session() as sess: #
placeholder在sess.run()的时候传入值 print(sess.run(output, feed_dict={input1: [7.],
input2: [2.]}))

import tensorflow as tf import numpy as np def add_layer
(inputs,in_size,out_size,activation_function=None):
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #激活 if
activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)return outputs

import tensorflow as tf import numpy as np def add_layer
(inputs,in_size,out_size,activation_function=None):
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #激活 if
activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)return outputs """定义数据形式""" #
(-1,1)之间，有300个单位，后面的是维度，x_data是有300行（300个例子） x_data=np.linspace(-1,1,300
)[:,np.newaxis]# 加噪声,均值为0，方差为0.05，大小和x_data一样 noise=np.random.normal(0,0.05
,x_data.shape) y_data=np.square(x_data)-0.5+noise xs=tf.placeholder(tf.float32,[
None,1]) ys=tf.placeholder(tf.float32,[None,1]) """建立网络""" #定义隐藏层，输入1个节点，输出10个节点
#损失函数,算出的是每个例子的平方，要求和（reduction_indices=[1]，按行求和）,再求均值
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1
]))"""训练""" #优化算法,minimize(loss)以0.1的学习率对loss进行减小
init=tf.global_variables_initializer()with tf.Session() as sess: sess.run(init)
for i in range(1000): sess.run(train_step,feed_dict={xs:x_data,ys:y_data}) if i%
50==0: print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

import tensorflow as tf import numpy as np import matplotlib.pylab as plt def
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #激活 if
activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)return outputs """定义数据形式""" #
(-1,1)之间，有300个单位，后面的是维度，x_data是有300行（300个例子） x_data=np.linspace(-1,1,300
)[:,np.newaxis]# 加噪声,均值为0，方差为0.05，大小和x_data一样 noise=np.random.normal(0,0.05
,x_data.shape) y_data=np.square(x_data)-0.5+noise xs=tf.placeholder(tf.float32,[
None,1]) ys=tf.placeholder(tf.float32,[None,1]) """建立网络""" #定义隐藏层，输入1个节点，输出10个节点
#损失函数,算出的是每个例子的平方，要求和（reduction_indices=[1]，按行求和）,再求均值
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1
]))"""训练""" #优化算法,minimize(loss)以0.1的学习率对loss进行减小
init=tf.global_variables_initializer()with tf.Session() as sess: sess.run(init)

#也可以用plt.show(block=False)来取消暂停，但是python3.5以后提供了ion的功能，更方便 for i in range(1000
): sess.run(train_step,feed_dict={xs:x_data,ys:y_data})if i%50==0: #
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #尝试先抹除，后绘制第二条线
#第一次没有线，会报错，try就会忽略错误，然后紧接着执行下面的步骤 try: # 画出一条后抹除掉,去除第一个线段，但是只有一个，也就是抹除当前的线段
ax.lines.remove(lines[0]) except Exception: pass
prediction_value=sess.run(prediction,feed_dict={xs:x_data})
lines=ax.plot(x_data,prediction_value,'r-',lw=5) #lw线宽 # 暂停0.1s plt.pause(0.1)

1. 随机梯度下降

2. 在参数更新上优化

3. 学习率

1. Tensorboard安装：
pip install tensorboard
2. 编程获得logs文件夹下的可视化文件

3. 进入cmd，到保存文件的路径下
cd E:\python\mofan Tensorflow\logs
4. 启动Tensorboard
Tensorboard --logdir=logs

1）右键上面的空白边，出现下面界面：

2）点击“标记”

3）选中，点击“Enter”，就复制了
http://PC-20160519HGCD:6006

28*28=784个数据点，也就是x输入的大小

import tensorflow as tf from tensorflow.examples.tutorials.mnist import
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #激活 if
activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)return outputs def compute_accuracy
(v_xs,v_ys): #全局变量 global prediction #生成预测值，也就是概率，即每个数字的概率
y_pre=sess.run(prediction,feed_dict={xs:v_xs})#对比预测的数据是否和真实值相等，对比位置是否相等，相等就对了
correct_prediction=tf.equal(tf.arg_max(y_pre,1),tf.arg_max(v_ys,1)) #计算多少个对，多少个错
#tf.cast(x,dtype)，将x数据转换为dtype类型
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
result=sess.run(accuracy,feed_dict={xs:v_xs,ys:v_ys})return result # define
placeholder for inputs to networks # 不规定有多少个sample，但是每个sample大小为784（28*28）
xs=tf.placeholder(tf.float32,[None,784]) ys=tf.placeholder(tf.float32,[None,10])
,activation_function=tf.nn.softmax)#the error between prediction and real data
cross_entropy=tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[
init=tf.global_variables_initializer()with tf.Session() as sess: sess.run(init)
for i in range(2000): batch_xs,batch_ys=mnist.train.next_batch(100)
sess.run(train_strp,feed_dict={xs:batch_xs,ys:batch_ys})if i%50==0:
print(compute_accuracy(mnist.test.images,mnist.test.labels))

0.1415 0.6516 0.751 0.7875 0.8115 0.8247 0.837 0.8403 0.8448 0.8532 0.8585
0.8594 0.8618 0.8631 0.8644 0.098 0.098 0.098

1）增加数据量

2）正则化

WW表示要学习的参数，过拟合中WW往往变化比较大，为了不让WW变化太大，在原始误差集上做些改变，即如果WW变化太大，则让cost的变化也变大。

3）专门用于神经网络的训练方法：Dropout regularization

* 第一条是直线拟合，没有很好的拟合效果，underfit
* 第二条效果较好，just right
* 第三条是过拟合，over-fitting
Tensorflow解决overfitting——dropout

Summary：所有需要在TensorBoard上展示的统计结果。
tf.name_scope()
：为Graph中的Tensor添加层级，TensorBoard会按照代码指定的层级进行展示，初始状态下只绘制最高层级的效果，点击后可展开层级看到下一层的细节。
tf.summary.scalar()：添加标量统计结果。
tf.summary.histogram()：添加任意shape的Tensor，统计这个Tensor的取值分布。
tf.summary.merge_all()：添加一个操作，代表执行所有summary操作，这样可以避免人工执行每一个summary op。
tf.summary.FileWrite：用于将Summary写入磁盘，需要制定存储路径logdir，如果传递了Graph对象，则在Graph
Visualization会显示Tensor Shape Information。执行summary

import tensorflow as tf from sklearn.datasets import load_digits from
sklearn.model_selectionimport train_test_split from sklearn.preprocessing import
#y是binary的，表示数字1，就在第二个位置放上1，其余都为0 y=digits.target
y=LabelBinarizer().fit_transform(y)#切分
(inputs,in_size,out_size,layer_name,activation_function=None):
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #激活 if
activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)# 下面的表示outputs的值
tf.summary.histogram(layer_name+'/outputs',outputs) return outputs #define
placeholder for inputs to network xs=tf.placeholder(tf.float32,[None,64])
,activation_function=tf.nn.softmax)#the error between prediction and real data
cross_entropy=tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[
1])) #添加标量统计结果 tf.summary.scalar('loss',cross_entropy)
init=tf.global_variables_initializer()with tf.Session() as sess: sess.run(init)
#添加一个操作，代表执行所有summary操作，这样可以避免人工执行每一个summary op merged=tf.summary.merge_all()
#summary writer goes in here train_writer=tf.summary.FileWriter("logs/train"
,sess.graph)#train为log的子文件夹 test_writer=tf.summary.FileWriter("logs/test"
,sess.graph)for i in range(500):
sess.run(train_step,feed_dict={xs:X_train,ys:y_train})if i%50==0: #record loss
train_result=sess.run(merged,feed_dict={xs:X_train,ys:y_train}) test_result =
sess.run(merged, feed_dict={xs: X_test, ys: y_test})

import tensorflow as tf from sklearn.datasets import load_digits from
sklearn.model_selectionimport train_test_split from sklearn.preprocessing import
#y是binary的，表示数字1，就在第二个位置放上1，其余都为0 y=digits.target
y=LabelBinarizer().fit_transform(y)#切分
(inputs,in_size,out_size,layer_name,activation_function=None):
#Weights是一个矩阵，[行，列]为[in_size,out_size]
Weights=tf.Variable(tf.random_normal([in_size,out_size]))#正态分布
#初始值推荐不为0，所以加上0.1，一行，out_size列 biases=tf.Variable(tf.zeros([1,out_size])+0.1)
#Weights*x+b的初始化的值，也就是未激活的值 Wx_plus_b=tf.matmul(inputs,Weights)+biases #dropout

activation_functionis None: #激活函数为None，也就是线性函数 outputs=Wx_plus_b else:
outputs=activation_function(Wx_plus_b)# 下面的表示outputs的值
tf.summary.histogram(layer_name+'/outputs',outputs) return outputs #define
placeholder for inputs to network """dropout""" # 确定保留多少结果不被舍弃掉
keep_prob=tf.placeholder(tf.float32) xs=tf.placeholder(tf.float32,[None,64])
,activation_function=tf.nn.softmax)#the error between prediction and real data
cross_entropy=tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[
1])) #添加标量统计结果 tf.summary.scalar('loss',cross_entropy)