contrib.learn
लाइब्रेरी के साथ ऐसा करने का एक अन्य विकल्प टेंसरफ्लो वेबसाइट पर डीप एमएनआईएसटी ट्यूटोरियल के आधार पर निम्नानुसार है । पहले, यह मानते हुए कि आपने संबंधित पुस्तकालयों (जैसे import tensorflow.contrib.layers as layers
) को आयात किया है , आप एक अलग विधि में एक नेटवर्क को परिभाषित कर सकते हैं:
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, # Because there are ten digits!
weights_initializer = layers.xavier_initializer(uniform=True),
weights_regularizer = layers.l2_regularizer(scale=reg),
activation_fn = None)
return out
फिर, एक मुख्य विधि में, आप निम्न कोड स्निपेट का उपयोग कर सकते हैं:
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])
# Make a network with regularization
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("")
# Make the loss function `loss_fn` with regularization.
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)
यह काम करने के लिए आपको पहले से जुड़े MNIST ट्यूटोरियल का पालन करने और संबंधित पुस्तकालयों को आयात करने की आवश्यकता है, लेकिन TensorFlow को सीखने के लिए यह एक अच्छा व्यायाम है और यह देखना आसान है कि नियमितीकरण आउटपुट को कैसे प्रभावित करता है। यदि आप एक तर्क के रूप में एक नियमितीकरण लागू करते हैं, तो आप निम्नलिखित देख सकते हैं:
- 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
ध्यान दें कि नियमितीकरण भाग आपको उपलब्ध वस्तुओं के आधार पर तीन आइटम देता है।
0, 0.0001, 0.01 और 1.0 के नियमितीकरण के साथ, मुझे उच्च सटीकता की शर्तों के खतरों को दिखाते हुए क्रमशः 0.9468, 0.9476, 0.9183 और 0.1135 के परीक्षण सटीकता मान मिलते हैं।
S = tf.get_variable(name='S', regularizer=tf.contrib.layers.l2_regularizer )
?