tenssorlayerを使って、残差ネットワークを構築して、mnistの手書き識別例を実現します.
最近、残差ネットワークを勉強しています.非常に力があります.深いネットワークでも、すぐにここのコードを収束させて、17階のネットワークを構築しています.5 epochで96%以上の正確性が得られます.
lost-損失、acc-精度
しかし、いくつかの問題が発見されました.トレーニングを使用すると、lost値は先に減少し、その後ずっと増大します.acc値はずっと上昇しています.preluニューロンを使用して、lost値はより速くなり、acc値はトレーニング時間が長くなると3減少します.eluニューロンを使用すると、eluニューロンlostがより緩やかに増加し、acc値は持続的に増加し、preluニューロンのacc値は後期に低下します.
レルを使わないのは主にレルの壊死が心配です.
完全コード
lost-損失、acc-精度
しかし、いくつかの問題が発見されました.トレーニングを使用すると、lost値は先に減少し、その後ずっと増大します.acc値はずっと上昇しています.preluニューロンを使用して、lost値はより速くなり、acc値はトレーニング時間が長くなると3減少します.eluニューロンを使用すると、eluニューロンlostがより緩やかに増加し、acc値は持続的に増加し、preluニューロンのacc値は後期に低下します.
レルを使わないのは主にレルの壊死が心配です.
完全コード
import tensorflow as tf
import tensorlayer as tl
sess = tf.InteractiveSession()
#
X_train, y_train, X_val, y_val, X_test, y_test = tl.files.load_mnist_dataset(shape=(-1,784))
# placeholder
x = tf.placeholder(tf.float32, shape=[None, 784], name='x')
y_ = tf.placeholder(tf.int64, shape=[None, ], name='y_')
#
network = tl.layers.InputLayer(x, name='input_layer')
res_a = network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu1')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu2')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu3')
res_a = network = tl.layers.ElementwiseLayer([network, res_a], combine_fn=tf.add, name='res_add1')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu4')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu5')
res_a = network = tl.layers.ElementwiseLayer([network, res_a], combine_fn=tf.add, name='res_add2')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu6')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu7')
res_a = network = tl.layers.ElementwiseLayer([network, res_a], combine_fn=tf.add, name='res_add3')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu8')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu9')
res_a = network = tl.layers.ElementwiseLayer([network, res_a], combine_fn=tf.add, name='res_add4')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu10')
network = tl.layers.DenseLayer(network, n_units=200, act = tf.nn.elu, name='relu11')
res_a = network = tl.layers.ElementwiseLayer([network, res_a], combine_fn=tf.add, name='res_add5')
network = tl.layers.DenseLayer(network, n_units=10, act = tf.identity, name='output_layer')
#
# tl.cost.cross_entropy tf.nn.sparse_softmax_cross_entropy_with_logits() softmax
y = network.outputs
cost = tl.cost.cross_entropy(y, y_, name = 'cost')
correct_prediction = tf.equal(tf.argmax(y, 1), y_)
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
y_op = tf.argmax(tf.nn.softmax(y), 1)
# optimizer
train_params = network.all_params
train_op = tf.train.AdamOptimizer(learning_rate=0.003, beta1=0.9, beta2=0.999,
epsilon=1e-08, use_locking=False).minimize(cost, var_list=train_params)
# session
tl.layers.initialize_global_variables(sess)
#
network.print_params()
network.print_layers()
#
tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_,
acc=acc, batch_size=500, n_epoch=500, print_freq=5,
X_val=X_val, y_val=y_val, eval_train=False)
#
tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost)
# .npz
tl.files.save_npz(network.all_params , name='model.npz')
sess.close()