2016-11-10 5 views
0

Я пытаюсь изучить tensorflow и в настоящее время пытается сделать простую модель логистической регрессии. Вот мой код, который я сшивал из разных примеров, которые я мог найти.логистическая регрессия отладка tenorflow

with tf.Session() as sess: 
    # Training data 
    input = tf.constant(tra) 
    target = tf.constant(np.transpose(data[:,1]).astype(np.float64)) 

    # Set model weights 
    W = tf.Variable(np.random.randn(10, 1).astype(np.float64)) 

    # Construct model 
    mat=tf.matmul(input,W) 
    pred = tf.sigmoid(mat) 

    # Compute the error 
    yerror = tf.sub(pred, target) 
    # We are going to minimize the L2 loss. The L2 loss is the sum of the 
    # squared error for all our estimates of y. This penalizes large errors 
    # a lot, but small errors only a little. 
    loss = tf.nn.l2_loss(yerror) 

    # Gradient Descent 
    update_weights = tf.train.GradientDescentOptimizer(0.05).minimize(loss) 

    # Initializing the variables 
    tf.initialize_all_variables().run() 

    for _ in range(50): 
     # Repeatedly run the operations, updating the TensorFlow variable. 
     sess.run(update_weights) 

     print(loss.eval()) 

Так код работает, но ошибка доза не улучшится после каждого «sess.run (update_weights)» itteration и я попытался с diffrent размеров шага.

Удивительно, если настройка является корректором?

Я немного не уверен, как отлаживать его, так как вычисление всего выполняется при команде запуска. Превосходные данные. Если некоторые из вас могут увидеть, что я делаю неправильно во всей этой сессии, создайте или дайте предложения о том, как я могу отладить это.

Помогите оценить очень.

ответ

0

Хорошо, поэтому я провел некоторое тестирование вокруг и обнаружил, что у него были проблемы с размерами «целевой» переменной. Я должен был Удельный что это AMX 1 матрица (где т число примеров Traning) это не будет сделано с указанием формы с постоянной переменной:

target = tf.constant(np.transpose(data[:,1]).astype(np.float64), shape=[m,1]) 

также градиен приличная не так хорошо, пока я нормализовал функции.

0

Хотя то, что вы делаете, является разумной вещью для регрессии, это, вероятно, не будет хорошо работать в задаче классификации. Кроме того, это не то, что обычно предназначено для логистической регрессии. Для логистической регрессии вы максимизируете log prob(correct label|input), суммированный по всем образцам данных. Это делается удобно, имея слой softmax.

Существуют полезные математические свойства, которые прилагаются к нему, что помогает отлаживать. Например, если вы вводите полностью случайный, то потеря должна быть log (N). Если вы установите все веса на ноль, то это должна быть потеря. Если вы наклеиваете образцы, скажем 1/3 положительный, а 2/3 отрицательный в двоичной классификации, то модель, которая не учитывает какие-либо данные (просто термин смещения), должна просто вернуть log(2/3), чтобы вы могли отлаживать то, что вы получаете степени.

+0

Благодарим за комментарий несколько вопросов: Могу ли я поставить случайные числа или должен быть случайным гуассианским со средним 0 и std 1? и N в log (N) число возможностей, которые у меня есть, или количество примеров подготовки? –

+0

Если все веса равны нулю, на самом деле не имеет значения, что такое веса, но в противном случае да, вы можете кормить все, что не связано с выходом. «N» относится к числу классов. – drpng

0

TensorFlow теперь поставляется с встроенным отладчиком под названием tfdbg. Он предоставляет значения промежуточных тензоров и представляет их через интерфейс командной строки. Это должно облегчить вам отладку кода. Пожалуйста, ознакомьтесь с документацией (по адресу master HEAD) по адресу: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/debugger/index.md

 Смежные вопросы

  • Нет связанных вопросов^_^