tensorflow中梯度下降算法与Michael Nielsen实现的比较
首先,我将概述我的问题。我有两种设置: 1) 基于tensorflow的网络 2) 一个基于迈克尔·尼尔森书中代码的网络 两个网完全相等。他们都有tensorflow中梯度下降算法与Michael Nielsen实现的比较,tensorflow,gradient-descent,Tensorflow,Gradient Descent,首先,我将概述我的问题。我有两种设置: 1) 基于tensorflow的网络 2) 一个基于迈克尔·尼尔森书中代码的网络 两个网完全相等。他们都有 3个隐藏层30个神经元 2个输入神经元,1个输出神经元 所有激活都是乙状结肠 随机梯度下降算法作为eta=3.0的学习算法 二次成本函数:成本函数=tf.标量(1.0/(N.训练集*2.0),tf.减少总和(tf.平方差(y,y))) 批量大小为10 权重初始化:连接lth和l+1层的权重初始化为sigma=1/sqrt(N_l),其中N_l是lt
- 3个隐藏层30个神经元
- 2个输入神经元,1个输出神经元
- 所有激活都是乙状结肠
- 随机梯度下降算法作为eta=3.0的学习算法
- 二次成本函数:成本函数=tf.标量(1.0/(N.训练集*2.0),tf.减少总和(tf.平方差(y,y)))
- 批量大小为10
- 权重初始化:连接lth和l+1层的权重初始化为sigma=1/sqrt(N_l),其中N_l是lth层中的神经元数量
导入读取数据
将matplotlib.pyplot作为plt导入
将numpy作为np导入
从随机导入randint
随机输入
从根目录\u numpy导入填充\u hist
从根导入TCanvas、TH2F、TText、TF1、TH1D
导入根
导入tensorflow作为tf
输入数学
# # # # # # ##
#读入数据#
# #
函数_输出=真#对y应用一个可逆函数,并使用修改后的输出y#u mod进行训练!直到现在,我们才知道这个函数只是一个规范化。
函数_输入=真#
完整集=读取数据。读取数据集(“/TH2D\U A00\U TB10.根”,“LHCChi2\U CMSSM\U NOBS161\U A00\U TB10”,“完整集”,功能输入,功能输出)
N_full_set=full_set.get_N()
N\u验证\u集=10000
N_训练集=N_完整集-(N_验证集)
满=范围(0,N全套)
随机。随机(完全)
训练子集=完整[:N_训练集]#训练集索引
验证子集=完整[N_训练集:N_训练集+N_验证集]#验证集索引
training_set=readData.read_data_set(“./TH2D_A00_TB10.root”,“LHCChi2_CMSSM_nobs161_A00_TB10”,“training_set”,
功能输入,功能输出,完整集=完整集,子集=训练子集)
验证集=读取数据。读取数据集(“./TH2D\U A00\U TB10.root”,“LHCChi2\U CMSSM\U NOBS161\U A00\U TB10”,“验证集”,
函数\输入,函数\输出,完整\集=完整\集,子集=验证\子集)
#查看完整数据集、培训数据集和验证数据集。可以使用x_mod()和y_mod()成员函数访问修改后的成员(在本例中是标准化的)
#标准化数据(输入和输出)将用于训练网络
打印“完整数据集”:
打印“x(输入)”
打印全套。获取
打印“y(输出)”
打印全套。获取
打印“x_mod”
打印全套。获取
打印“y_mod”
打印全套。获取您的mod()
打印“----------------------”
打印“培训数据集”:
打印“x(输入)”
打印训练集。获取
打印“y(输出)”
打印训练集。获取()
打印“x_mod”
打印训练集。获取
打印“y_mod”
打印训练集。获取你的mod()
打印“----------------------”
打印“评估数据集”:
打印“x(输入)”
打印验证\u集。获取\u x()
打印“y(输出)”
打印验证集。获取
打印“x_mod”
打印验证\u集。获取\u x\u mod()
打印“y_mod”
打印验证\u集。获取\u y\u mod()
打印“----------------------”
# # # # # # # # # # # ##
#建立网络#
# #
N_时代=20
学习率=3.0
批量大小=10
N1=2#等于N_输入
N2=30
N3=30
N4=30
N5=1
N_in=N1
N_out=N5
#直接计算一批中所有元素的所有内容
“”“示例:N_in=2,N_out=3,mini_batch_size=5,激活函数=线性。在输出矩阵gibt es 5Zeilen中,jede fuer ein mini batch。jede Zeile hat 3 Spalten fuer ein ein输出神经元jeweils
W2
[[-0.31917086 -0.03908769 0.5792625 ]
[ 1.34563279 0.03904691 0.39674851]]
b2
[ 0.40960133 -0.5495823 -0.97048181]
x_in
[[ 23.2 12.2 ]
[ 0. 1.1 ]
[ 2.3 3.3 ]
[ 23.22222 24.44444]
[ 333. 444. ]]
y=x_英寸*W2+b2
[[ 9.42155647 -0.98004436 17.30874062]
[ 1.88979745 -0.50663072 -0.53405845]
[ 4.1160965 -0.51062918 1.67109203]
[ 25.8909874 -0.50280523 22.17957497]
[ 491.5866394 3.77104688 368.08026123]]
他是克劳尔,在2号德劳费尔特·威尔德中的矩阵x_中的b2。
W2是一个矩阵的变换器,它的定义是。
"""
x=tf.placeholder(tf.float32,[None,N1])#不要使用shape=(batch_size,N1)参数,因为我们需要为不同的批大小使用这个参数
W2=tf.Variable(tf.random_normal([N1,N2],mean=0.0,stddev=1.0/math.sqrt(N1*1.0))#用1/sqrt(输入神经元的权重数/之前层中的神经元数)初始化一个神经元的权重
b2=tf.变量(tf.随机_正态([N2]))
a2=tf.sigmoid(tf.matmul(x,W2)+b2)#x=a1
W3=tf.变量(tf.随机_正态([N2,N3],平均值=0.0,标准差=1.0/数学sqrt(N2*1.0)))
b3=tf.变量(tf.随机_正态([N3]))
a3=tf.sigmoid(tf.matmul(a2,W3)+b3)
W4=tf.变量(tf.随机_正态([N3,N4],均值=0.0,标准差=1.0/数学sqrt(N3*1.0)))
b4=tf.变量(tf.随机_正常([N4]))
a4=tf.sigmoid(tf.matmul(a3,W4)+b4)
W5=tf.变量(tf.随机_正态([N4,N5],均值=0.0,标准差=1.0/数学sqrt(N4*1.0)))
b5=tf.变量(tf.随机_正态([N5]))
y=tf.sigmoid(tf.matmul(a4,W5)+b5)
y=tf.placeholder(tf.float32,[None,N_out])#,shape=(None,N_out)
# # # # # # # # # # # # # #
#初始化和培训#
# #
成本函数=tf.标量(1.0/(N.训练集*2.0),tf.减少和(tf.平方差(y,y)))
错误\u至\u所需\u输出=y-y_
abs\u错误\u至\u所需_