Не нужно указывать форму, если используется постоянный инициализатор? - PullRequest
0 голосов
/ 02 мая 2018

Попытка создать модель линейной регрессии с тензорным потоком. Теперь я на шаге, когда я должен создать переменные для весов и смещений:

w = tf.get_variable('weights', shape = None, initializer = None)
b = tf.get_variable('bias', shape = None, initializer = None)

Из Стэнфордского курса CS20si я прочитал, что «Нет необходимости указывать форму, если используя константу инициализации ". Но эта часть кода вызывает:

ValueError: Shape of a new variable (weights) must be fully defined, but instead was <unknown>.

Значит ли это, что я должен поставить фигуры для этих переменных? Я думаю, что что-то потерял. Есть предложения?

1 Ответ

0 голосов
/ 02 мая 2018

Вы должны установить фигуры для инициализации этих переменных. Возьмите логистическую регрессию в качестве примера.

import tensorflow as tf
x=tf.placeholder(shape=[None,5],dtype=tf.float32,name='input')
y_=tf.placeholder(shape=[None,1],dtype=tf.float32,name='label')

w=tf.Variable(tf.random_normal([5,1]),name='weights')
b=tf.Variable(tf.zeros([1]),name='bias')
y_pred=tf.nn.softmax(tf.matmul(x,w)+b)

cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))


train_op=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    tf.global_variables_initializer().run()
    for epoch in range(1000):
        _, loss = sess.run([train_op, cross_entropy], feed_dict={x: [X_train[i]], y: [y_train[i]]})
        if (epoch % 50 == 0):
            print('Epoch: {0}, total loss={1}'.format(epoch + 1, loss))

Если вы используете константу для инициализации, как показано ниже, вам не нужно задавать форму.

a=tf.get_variable("my_variable", dtype=tf.int32,initializer=tf.constant([2, 3]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...