2016-03-02 13 views
2
def compileActivation(self, net, layerNum): 
    variable = net.x if layerNum == 0 else net.varArrayA[layerNum - 1] 
    #print tf.expand_dims(net.dropOutVectors[layerNum], 1) 

    #print net.varWeights[layerNum]['w'].get_shape().as_list() 

    z = tf.matmul((net.varWeights[layerNum]['w']), (variable * (tf.expand_dims(net.dropOutVectors[layerNum], 1) if self.dropout else 1.0))) + tf.expand_dims(net.varWeights[layerNum]['b'], 1) 

    a = self.activation(z, self.pool_size) 
    net.varArrayA.append(a) 

Я бегу функцию активации, которая вычисляет z и передает его в активации сигмовидной. Когда я пытаюсь выполнить вышеуказанную функцию, я получаю следующее сообщение об ошибке:TensorFlow ошибка: TensorShape() должны иметь одинаковый ранг

ValueError: Shapes TensorShape([Dimension(-2)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank 

Theano эквивалент для вычисления z работает просто отлично:

z = T.dot(net.varWeights[layerNum]['w'], variable * (net.dropOutVectors[layerNum].dimshuffle(0, 'x') if self.dropout else 1.0)) + net.varWeights[layerNum]['b'].dimshuffle(0, 'x') 
+0

Этот код выглядит синтаксически правильным, но кажется, что какой-то объект в 'net' имеет коррумпированную форму. В частности, 'TensorShape ([Dimension (-2)]) никогда не должно происходить, и это тестируется в TensorFlow 0.7.0, поэтому при обновлении вы можете получить более полезное сообщение об ошибке. – mrry

+0

Спасибо. Я попробую обновить –

ответ

0

Mihir,

Когда я столкнулись с этой проблемой, потому что мои заполнители были неправильным размером в моем словаре фидов. Также вы должны знать, как запустить график в сеансе. tf.Session.run(fetches, feed_dict=None)

Вот мой код, чтобы сделать placeholders

# Note this place holder is for the input data feed-dict definition 
input_placeholder = tf.placeholder(tf.float32, shape=(batch_size, FLAGS.InputLayer)) 
# Not sure yet what this will be used for. 
desired_output_placeholder = tf.placeholder(tf.float32, shape=(batch_size, FLAGS.OutputLayer)) 

Вот моя заливка функция словаря подачи:

def feel_feed_funct(data_sets_train, input_pl, output_pl): 
    ti_feed, dto_feed = data_sets_train.next_batch(FLAGS.batch_size) 

    feed_dict = { 
    input_pl: ti_feed, 
    output_pl: dto_feed 
    } 
    return feed_dict 

Позже я это:

# Fill a feed dictionary with the actual set of images and labels 
# for this particular training step. 
feed_dict = fill_feed_dict(data_sets.train, input_placeholder, desired_output_placeholder) 

Затем запустить сессию и получить выходы, я имею эту строку

_, l = sess.run([train_op, loss], feed_dict=feed_dict) 
Смежные вопросы