Tensorflow会话.运行feed dict机制



所以我是张量流的新手,我的错误是我在喂养train_neural_network(x)的x参数无效。

我要做的是为4999次迭代,输入一个[1400]数组,它是图像的位值。输入4999张图片。我把图片读了进去scipy。IO是矩阵而不是张量。

我对占位符是如何使用的以及我的代码通常有什么问题感到困惑。既然我把x和y输入到占位符,那么输入到train_neural_network(x)的x不应该是占位符的值吗?

x = tf.placeholder('float',[1,400])
y = tf.placeholder('float',[1,10])

def neural_network_model(data):
        hidden_layer1 = {'weights':tf.Variable(tf.random_normal([400,n_nodes_hl1])),
                        'biases':tf.Variable(tf.random_normal(n_nodes_hl1))}
        hidden_layer2 = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1,n_nodes_hl2])),
                        'biases':tf.Variable(tf.random_normal(n_nodes_hl2))}
        hidden_layer3 = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2,n_nodes_hl3])),
                        'biases':tf.Variable(tf.random_normal(n_nodes_hl3))}
        output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl3,n_classes])),
                        'biases':tf.Variable(tf.random_normal([n_classes]))}
        #(input * weights) + biases 
        l1 = tf.add(tf.matmul(data, hidden_layer1['weights']),hidden_layer1['biases'])
        l1 = tf.nn.relu(l1)
        l2 = tf.add(tf.matmul(l1, hidden_layer2['weights']),hidden_layer2['biases'])
        l2 = tf.nn.relu(l2)
        l3 = tf.add(tf.matmul(l2, hidden_layer3['weights']),hidden_layer3['biases'])
        l3 = tf.nn.relu(l3)
        output = tf.add(tf.matmul(l3, output_layer['weights']),output_layer['biases'])
        return output
def train_neural_network(x): 
        prediction = neural_network_model(x)
        cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(prediction,y))
        optimizer = tf.train.AdamOptimizer().minimize(cost)
        hm_epochs = 4999 
        with tf.Session() as sess:
            sess.run(tf.initialize_all_variables())
            for epoch in range(hm_epochs):  
                sess.run([optimizer,cost], feed_dict = {x: input_X[epoch], y: encoded_y[epoch]})
                print('Epoch',epoch,'completed out of', hm_epochs)

实际错误如下:

%run "/Users/JaeWoo/Desktop/research/tensorpractice/DeepNeural.py"
train_neural_network(x)
W tensorflow/core/framework/op_kernel.cc:940] Invalid argument: shape must be a vector of {int32,int64}, got shape []
W tensorflow/core/framework/op_kernel.cc:940] Invalid argument: shape must be a vector of {int32,int64}, got shape []
... repeated for several times 

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-86-7c7cbdae9b34> in <module>()
----> 1 train_neural_network(x)
/Users/JaeWoo/Desktop/research/tensorpractice/DeepNeural.py in 
train_neural_network(x)
     67 
     68         with tf.Session() as sess:
---> 69             sess.run(tf.initialize_all_variables())
     70 
     71             for epoch in range(hm_epochs):

我认为错误在于您如何定义tf.占位符。试试这个

x = tf.placeholder(tf.float32,shape=[1,400])

如果你处理的是批处理,你可能还想这样定义

x = tf.placeholder(tf.float32,shape=[None,400])

最新更新