Bunu contrib.learn
kitaplıkla yapmanın başka bir seçeneği , Tensorflow web sitesindeki Deep MNIST öğreticisine göre aşağıdaki gibidir . İlk olarak, ilgili kitaplıkları (gibi import tensorflow.contrib.layers as layers
) içe aktardığınızı varsayarak , ayrı bir yöntemde bir ağ tanımlayabilirsiniz:
def easier_network(x, reg):
""" A network based on tf.contrib.learn, with input `x`. """
with tf.variable_scope('EasyNet'):
out = layers.flatten(x)
out = layers.fully_connected(out,
num_outputs=200,
weights_initializer = layers.xavier_initializer(uniform=True),
weights_regularizer = layers.l2_regularizer(scale=reg),
activation_fn = tf.nn.tanh)
out = layers.fully_connected(out,
num_outputs=200,
weights_initializer = layers.xavier_initializer(uniform=True),
weights_regularizer = layers.l2_regularizer(scale=reg),
activation_fn = tf.nn.tanh)
out = layers.fully_connected(out,
num_outputs=10,
weights_initializer = layers.xavier_initializer(uniform=True),
weights_regularizer = layers.l2_regularizer(scale=reg),
activation_fn = None)
return out
Ardından, ana yöntemde aşağıdaki kod parçacığını kullanabilirsiniz:
def main(_):
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
y_conv = easier_network(x, FLAGS.regu)
weights = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'EasyNet')
print("")
for w in weights:
shp = w.get_shape().as_list()
print("- {} shape:{} size:{}".format(w.name, shp, np.prod(shp)))
print("")
reg_ws = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES, 'EasyNet')
for w in reg_ws:
shp = w.get_shape().as_list()
print("- {} shape:{} size:{}".format(w.name, shp, np.prod(shp)))
print("")
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
loss_fn = cross_entropy + tf.reduce_sum(reg_ws)
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss_fn)
Bunun işe yaraması için, daha önce bağladığım MNIST öğreticisini izlemeniz ve ilgili kitaplıkları içe aktarmanız gerekir, ancak TensorFlow'u öğrenmek güzel bir alıştırmadır ve normalleştirmenin çıktıyı nasıl etkilediğini görmek kolaydır. Bağımsız değişken olarak bir normalleştirme uygularsanız, şunları görebilirsiniz:
- EasyNet/fully_connected/weights:0 shape:[784, 200] size:156800
- EasyNet/fully_connected/biases:0 shape:[200] size:200
- EasyNet/fully_connected_1/weights:0 shape:[200, 200] size:40000
- EasyNet/fully_connected_1/biases:0 shape:[200] size:200
- EasyNet/fully_connected_2/weights:0 shape:[200, 10] size:2000
- EasyNet/fully_connected_2/biases:0 shape:[10] size:10
- EasyNet/fully_connected/kernel/Regularizer/l2_regularizer:0 shape:[] size:1.0
- EasyNet/fully_connected_1/kernel/Regularizer/l2_regularizer:0 shape:[] size:1.0
- EasyNet/fully_connected_2/kernel/Regularizer/l2_regularizer:0 shape:[] size:1.0
Düzenli hale getirme bölümünün, mevcut öğelere bağlı olarak size üç öğe verdiğine dikkat edin.
0, 0,0001, 0,01 ve 1,0 düzenlemeleri ile, yüksek düzenlilik terimlerinin tehlikelerini gösteren sırasıyla 0,9468, 0,9476, 0,9183 ve 0,1135 test doğruluk değerleri elde ediyorum.
S = tf.get_variable(name='S', regularizer=tf.contrib.layers.l2_regularizer )
mu?