我正在从头开始将一个旧的玩具项目迁移到numpy到tensorflow。 但是,我可以看到tensorflow实现没有收敛。
我一整天都在努力,但我找不到解决方案。 它是MLP的两个隐藏层。 这是我的张量流实现:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from util import LoadData,DisplayPlot
def affine_layer(x,w,b):
return tf.matmul(x,w)+b
def relu(x):
return tf.nn.relu(x)
inputs_train, _, _, target_train, _, \
_ = LoadData('faces.npz')
input_size=2304
hiddenunits=[16,32]
outputsize=7
#Weights
W1=0.1*tf.Variable(tf.random_normal([input_size,hiddenunits[0]]))
b1=tf.Variable(tf.zeros([hiddenunits[0]]))
W2=0.1*tf.Variable(tf.random_normal([hiddenunits[0],hiddenunits[1]]))
b2=tf.Variable(tf.zeros([hiddenunits[1]]))
W3=0.01*tf.Variable(tf.random_normal([hiddenunits[1],outputsize]))
b3=tf.Variable(tf.zeros([outputsize]))
x=tf.placeholder(tf.float32,[None,input_size])
t=tf.placeholder(tf.float32,[None,outputsize])
#Two fully connected layer with relu non-linearities
l1r=relu(affine_layer(x,W1,b1))
l2r=relu(affine_layer(l1r,W2,b2))
y=affine_layer(l2r,W3,b3)
ce=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y,t))
optimize=tf.train.MomentumOptimizer(learning_rate=0.01,momentum=0.9).minimize(ce)
model=tf.initialize_all_variables()
batch_size=100
num_epochs=30
steps=inputs_train.shape[0]/batch_size
n=inputs_train.shape[0]
rnd_idx=np.arange(n)
print "Num steps :%i"%steps
print "Batch size:%i"%batch_size
print "Training examples :%i"%n
#-----
train_ce_list=[]
with tf.Session() as sess:
sess.run(model)
for epoch in range(num_epochs):
np.random.shuffle(rnd_idx)
inputs_train=inputs_train[rnd_idx]
target_train=target_train[rnd_idx]
for i in range(steps):
start=i*batch_size
end=min(n,(i+1)*batch_size)
xb=inputs_train[start:end]
tb=target_train[start:end]
train_ce,_= sess.run([ce,optimize],{x:xb,t:tb})
train_ce_list.append((epoch, train_ce))
print "Epoch %i Step %i CE:%.2f"%(epoch,i,train_ce)
在运行此代码几个时代后,我得到的最好的是:
Epoch 20 Step 0 CE:1.85
Epoch 20 Step 1 CE:1.83
Epoch 20 Step 2 CE:1.78
Epoch 20 Step 3 CE:1.90
但是,如果我使用相同的超参数运行我的旧实现(纯numpy)并使用具有动量的SGD:
Epoch 20 Step 0 CE 0.97498
Epoch 20 Step 1 CE 0.85173
Epoch 20 Step 2 CE 0.91749
Epoch 20 Step 3 CE 1.06517
我们可以看出差异非常明显。
任何人都可以帮我理解发生了什么事吗? 我错过了吗?