Тензор потока: регрессия с двумерным входным массивом и скалярным выходом - PullRequest
0 голосов
/ 25 февраля 2019

Я новый пользователь tenorflow и использую его для решения задач регрессии.Вход в модель нейронной сети представляет собой двумерный массив (200 строк и 51 столбец) с выходом по этому входу - скаляр.Массивы ввода и соответствующие выходные данные хранятся в словаре, для которого я пытаюсь минимизировать среднеквадратичные потери ошибок.Модель построена с использованием следующего кода

keysD = TrainingDic.keys()
loss = tf.zeros([1])
for i in range(len(keysD)):
    X_data = tf.placeholder(tf.float32, [200,51]) 
    trueY = tf.placeholder(tf.float32)
    predY, cost = build_model(X_data,trueY) # neural network returning predicted value and squared error
    loss = tf.add(loss,cost)

meanLoss = tf.divide(loss,len(keysD)) 
train = tf.train.AdamOptimizer(learning_rate).minimize(meanLoss)

Для запуска модели

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(epochs):
        for i in range(len(keysD)):
            xTT = TrainingDic[i][0] #array of dimension [200,51]
            yTT = TrainingDic[i][1] #scalar
            feed_dict = {X_data:xTT, trueEnergy:yTT}
            lo = sess.run([meanLoss],feed_dict)
            print(lo)

Но это дает мне следующую ошибку

tenorflow.python.framework.errors_impl.InvalidArgumentError: Необходимо передать значение для тензора-заполнителя 'Placeholder' с плавающей запятой и формой dtype [200,63] [[Node: Placeholder = Placeholderdtype = DT_FLOAT, shape = [200,63], _device = "/ job: localhost /реплика: 0 / задача: 0 / процессор: 0 "]]

Неужели кто-нибудь сможет мне помочь с этим?Я уверен, что мне не хватает фундаментальной концепции, касающейся заполнителей, и я буду признателен, если буду руководствоваться в правильном направлении.

Другой подход, над которым я работал, заключался в том, чтобы сгладить входной массив в вектор строк и предоставить всю серию обучающего словаря.как один.Этот подход работал без ошибок.единственная проблема заключается в том, что я также ищу градиенты вывода относительно столбцов X_data.С уплощенным массивом я не уверен, как получить информацию о градиенте.

Нейронная сеть

def build_model(X_data,trueY, input_dim):

n_hUnits_1 =20
n_hUnits_2 = 20
W_1 = tf.Variable(tf.random_uniform([input_dim,n_hUnits_1], -1,1))
b_1 = tf.Variable(tf.zeros([n_hUnits_1]))
W_2 = tf.Variable(tf.random_uniform([n_hUnits_1,n_hUnits_2], -1,1))
b_2 = tf.Variable(tf.zeros([n_hUnits_2]))
W_O = tf.Variable(tf.random_uniform([n_hUnits_2,1], -1,1))
b_O = tf.Variable(tf.zeros([1]))

layer_1 = tf.add(tf.matmul(X_data,W_1), b_1)
layer_1 = tf.nn.sigmoid(layer_1)
# layer 1 multiplying and adding bias then activation function
layer_2 = tf.add(tf.matmul(layer_1,W_2), b_2)
layer_2 = tf.nn.sigmoid(layer_2)
# layer 2 multiplying and adding bias then activation function
predY = tf.add(tf.matmul(layer_2,W_O), b_O)
cost = tf.square(predY-trueY)
return predY, cost 

1 Ответ

0 голосов
/ 26 февраля 2019

Ошибка указывает на наличие значения заполнителя, которое не указывается при запуске сеанса.

Необходимо указать значение для тензора заполнителя 'Placeholder'

tensor 'Placeholder' предложить узел графика с именем Placeholder.

Ошибка исходит из того, как вы запускаете сеанс.

feed_dict = {X_data:xTT, trueEnergy:yTT}

Ваша модель ожидаетtrueY вместо trueEnergy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...