TypeError:预期的二进制或unicode字符串,得到列表Tensorflow

时间:2017-12-01 21:18:23

标签: python-3.x debugging tensorflow

好吧,好好忍受我。所以这是我的代码:

import tensorflow as tf
import os
import pickle
from numpy import asarray, reshape

os.chdir('PATH')

with open('xSensor.pkl','rb') as file:
    x_train = asarray(pickle.load(file))

with open('ySensor.pkl','rb') as file:
    y_train = asarray(pickle.load(file))

def neural_network(data):
    n_nodes_h1 = 1000
    n_nodes_h2 = 1000
    n_nodes_h3 = 500

    hidden_layer_1 = {
        'weights': tf.Variable(tf.random_normal([13, n_nodes_h1],dtype=tf.float64)),
        'biases': tf.Variable(tf.random_normal([n_nodes_h1],dtype=tf.float64))
    }

    #Omitting some code that just defines a couple more layers in the same format as above

    layer_1 = tf.matmul(data, hidden_layer_1['weights']) + hidden_layer_1['biases']
    layer_1 = tf.nn.relu(layer_1)

    #Omitting more code.

    output = tf.matmul(layer_3, output['weights']) + output['biases']

    return output


def train_network(x_t,y_t):
    x = tf.placeholder(tf.float64, shape=[None, 13])
    y = tf.placeholder(tf.float64)
    prediction = neural_network(x_t)
    y_t = reshape(y_t,(700,1))
    cost = tf.reduce_mean(tf.losses.mean_squared_error(labels=y_t, predictions=prediction))
    optimizer = tf.train.AdamOptimizer(0.005).minimize(cost) #learning rate by default is 0.01
    n_epochs = 1000

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for _ in range(0, n_epochs):
            x_ = sess.run([optimizer,cost], feed_dict={x: x_t, y: y_t})
            print("Loss is: ", x_[1])



train_network(x_train,y_train)

这是错误日志:

Traceback (most recent call last):
  File "C:/Users/my system/Desktop/height_sensor.py", line 94, in <module>
    train_network(x_train,y_train)
  File "C:/Users/my system/Desktop/height_sensor.py", line 77, in train_network
    prediction = neural_network(x_t)
  File "C:/Users/my system/Desktop/height_sensor.py", line 59, in neural_network
    layer_1 = tf.matmul(data, hidden_layer_1['weights']) + hidden_layer_1['biases']
  File "C:\Users\my system\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\ops\math_ops.py", line 1844, in matmul
    a = ops.convert_to_tensor(a, name="a")
  ...etc...
TypeError: Expected binary or unicode string, got [15.0126, 1.38684, 27.6, 1.6323, -0.624113, 8.97763, 2.06581, 8.88303, -0.689839, 9.13284, 353.183, 349.178, 210.498]

Process finished with exit code 1

很抱歉发布了这么多代码,我想减少发布waaaay但是我担心我可能会忽略导致错误的一件事。 如果有人能指出我正确的方向,我会非常高兴。 感谢

1 个答案:

答案 0 :(得分:1)

发布所有代码,特别是所有错误追溯实际上是一个好主意。我能够让您的代码与一些虚假数据一起运行。我最好的猜测是关于pickle返回x_train的值的方式;可能这个数组有太多的嵌套。我可以帮助更多地完成整个追溯,但无论如何,我建议输出一些x_train并查看它是否格式正确。