2016-11-04 3 views
0

Я создаю 1-ю сверточную нейронную сеть для своих собственных данных (спектры), и у меня проблема с tf.reshape. Сначала я загрузить в данном с пандами, и преобразовывать их в Numpy массивов, состоящих из 708 примера спектров подготовки, каждая длиной 2151,Ошибка преобразования тензорного потока для 1d сверточной нейронной сети

import pandas as pd 
import numpy as np 
data = pd.read_csv('test.csv',header=None) 
yTrue = data.ix[:,0].as_matrix() 
data = data - data.mean() 
data = data.ix[:,1:].as_matrix() 

где я вычесть среднее значение в каждом столбце. Таким образом, данные имеют размеры 708 x 2151. Затем я создаю сеть, которая начинается с,

sess = tf.InteractiveSession() 
## define inputs 
x_ = tf.placeholder(tf.float32, shape=[None, 2151]) 
x_ = tf.reshape(x_, [-1,1,2151,1]) 
y_ = tf.placeholder(tf.float32, shape=[None]) 

, которые являются входами для моего 1d сверточной нейронной сети (с ядрами с шириной 10 и 32 функцией карты),

W_conv1 = weight_variable([1, 10, 1, 32]) 
b_conv1 = bias_variable([32]) 
h_conv1 = tf.nn.relu(conv2d(x_, W_conv1) + b_conv1) 
h_pool1 = max_pool_2x2(h_conv1) 

Я тогда строить остальная часть сети, а затем попытаться запустить ADAM на него,

cost_function = tf.reduce_mean(tf.pow(y_out - y_, 2))/(2 * samples_number) #L2 loss 
train_step = tf.train.AdamOptimizer(1e-4).minimize(cost_function) 
correct_prediction = tf.equal(tf.argmax(y_out,1), tf.argmax(y_,1)) 
sess.run(tf.initialize_all_variables()) 
for i in range(20000): 
    print(i) 
    sess.run(train_step, feed_dict={x_: data, y_: yTrue}) 

Однако я получаю следующее сообщение об ошибке:

ValueError: Cannot feed value of shape (708, 2151) for Tensor u'Reshape_26:0', 
which has shape '(?, 1, 2151, 1)' 

Я рассмотрел следующие ответы: TensorFlow/TFLearn: ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'; Tensorflow error using my own data, которые предполагают, что мне нужно сделать некоторые изменения, прежде чем передавать свои данные в сеть. Однако я не уверен, что это должно быть? В частности, поскольку следующие работы в первой строке данных,

t = tf.constant(data[0]) 
tf.reshape(t,[1,1,2151,1]) 

У вас есть идеи?

Беста,

Бен

ответ

1

Вопрос заключается в том, что feed_dict может заменить любой тензор, и так как вы изменили x_ ссылаться на reshape оп, это вещь, которую он пытается заменить. Он должен работать, если вы просто использовать различные переменные Python для ссылки на заполнитель и перекроить цит:

x_placeholder_ = tf.placeholder(tf.float32, shape=[None, 2151]) 
x_ = tf.reshape(x_placeholder_, [-1,1,2151,1]) 

Затем при кормлении используйте x_placeholder_:

sess.run(train_step, feed_dict={x_placeholder_: data, y_: yTrue}) 
+0

Спасибо, но когда я изменить код на выше Я получаю следующую ошибку: InvalidArgumentError: вы должны подать значение для тензора заполнителя «Placeholder_47» с dtype float \t [[Узел: Placeholder_47 = Placeholder [dtype = DT_FLOAT, shape = [], _device = "/ job: localhost/replica: 0/task: 0/cpu: 0 "]()]] - Есть идеи, что это значит? Я думал, что использование feed_dict должно означать, что это нормально ... – ben18785

+1

Вы делаете это внутри ноутбука Jupyter? Похоже, целая куча заполнителей плавает вокруг. Попробуйте 'tf.reset_default_graph()'? –

+0

Я. Я попробовал выше, но, к сожалению, у меня все еще такая же проблема. Есть еще идеи? Извини за это! – ben18785

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