2017-02-22 13 views
1

У меня есть эти четыре слоя определены:Tensorflow: преобразование вручную создавать слои tf.contrib.layers

layer_1 = tf.add(
    tf.matmul(input, tf.Variable(tf.random_normal([n_input, n_hidden_1])), 
    tf.Variable(tf.random_normal([n_hidden_1])))) 
layer_2 = tf.nn.sigmoid(tf.add(
    tf.matmul(layer_1, tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 
    tf.Variable(tf.random_normal([n_hidden_2])))) 
layer_3 = tf.nn.sigmoid(tf.add(
    tf.matmul(layer_2, tf.Variable(tf.random_normal([n_hidden_2, n_hidden_1])))), 
    tf.Variable(tf.random_normal([n_hidden_1])))) 
layer_4 = tf.add(
    tf.matmul(layer_3, tf.Variable(tf.random_normal([n_hidden_1, n_input]))), 
    tf.Variable(tf.random_normal([n_input]))) 

Я хотел бы преобразовать этот код в код на основе tf.contrib.layers. До сих пор я получил

layer_1 = tf.contrib.layers.fully_connected(
    inputs=input, 
    num_outputs=n_hidden_1, 
    activation_fn=None) 
layer_2 = tf.contrib.layers.fully_connected(
    inputs=layer_1, 
    num_outputs=n_hidden_2, 
    activation_fn=tf.nn.sigmoid) 
layer_3 = tf.contrib.layers.fully_connected(
    inputs=layer_2, 
    num_outputs=n_hidden_1, 
    activation_fn=tf.nn.sigmoid) 
layer_4 = tf.contrib.layers.linear(
    inputs=layer_3, 
    num_outputs=n_input) 

чтения на https://www.tensorflow.org/versions/master/tutorials/layers/ и https://www.tensorflow.org/api_docs/python/tf/contrib/layers/fully_connected. Я прочитал в https://www.tensorflow.org/api_guides/python/contrib.layers#Higher_level_ops_for_building_neural_network_layers, что tf.contrib.layers.linear является альтернативой линейному слою.

Но мой результат больше отличается от того, что я получил раньше, а затем, что это может быть случайно. Что я сделал неправильно в конфигурации слоев?

ответ

0

Одно различие между кодом и версией tf.contrib.layers что Инициализаторы по умолчанию различны:

Они, как правило, считаются хорошими по умолчанию для полностью подключенного слоя, но вы можете изменить их с помощью tf.random_normal_initializer следующим образом:

layer_1 = tf.contrib.layers.fully_connected(
    inputs=input, 
    num_outputs=n_hidden_1, 
    activation_fn=None, 
    weights_initializer=tf.random_normal_initializer(), 
    biases_initializer=tf.random_normal_initializer()) 
# ...