Python TensorFlow CSV输入

Python TensorFlow CSV输入,python,csv,tensorflow,Python,Csv,Tensorflow,我正在尝试使用tf.TextLineReader()读取CSV文件(以性能良好的方式,如谷歌推荐的方式) 如您所见,我可以创建批处理,稍后我将使用这些批处理来训练我的非常基本的回归模型。 问题是tf.train.shuffle\u batch返回一个张量。这意味着我不能在我的模型Y_pred=X*W+b中使用占位符X。 在培训阶段,我现在将批处理变量用作占位符,但我需要一个占位符,以便使用不同的数据进行测试 我做错了什么 编辑:我修改了Nicolas建议的代码(非常感谢!),但现在我得到了0.0

我正在尝试使用tf.TextLineReader()读取CSV文件(以性能良好的方式,如谷歌推荐的方式)

如您所见,我可以创建批处理,稍后我将使用这些批处理来训练我的非常基本的回归模型。 问题是tf.train.shuffle\u batch返回一个张量。这意味着我不能在我的模型Y_pred=X*W+b中使用占位符X。 在培训阶段,我现在将批处理变量用作占位符,但我需要一个占位符,以便使用不同的数据进行测试

我做错了什么

编辑:我修改了Nicolas建议的代码(非常感谢!),但现在我得到了0.0的准确度。。。。那有点像阿克沃德。 我正在使用鲍鱼数据集(8个特征和3个类),其中我用一个热向量(1,0,0),(0,1,0)更改了分类的(M)ale(F)emale(I)nfant结果


您可以做的是实现各种方法来

  • 定义模型参数
  • 根据这些参数和一些数据建立模型
  • 根据您的模型构建一个优化程序
例如,您可以有类似的内容(假设您的训练和测试数据位于两组不同的文件中):


总而言之:我需要将一些测试数据传递给这个经过训练的模型Y_predicted=tf.matmul(data_batch,W)+b我如何调整它,以便我仍然可以使用批样本张量作为输入?它工作。。。我只需要把批量大小作为一个参数,这样我就可以有不同的大小来进行测试和训练。在我得到零之前,因为我只是用一个样本做了测试。好的,我需要试试。。只有一个问题:为什么你也需要交叉熵来进行测试?我只是假设你想用交叉熵来评估你训练过的模型的准确性。很明显,如何测试它取决于您。
 def getPartitionedDatasets(filenames):

    filename_queue = tf.train.string_input_producer(filenames)
    reader = tf.TextLineReader()
    _, value = reader.read(filename_queue) # return a key and value (key is for debugging

    record_defaults = [[1.0] for _ in range(N_FEATURES+1)]
    cont = tf.decode_csv(value, record_defaults=record_defaults)

    features = tf.stack([cont[1],cont[2],cont[3],cont[4],cont[5],cont[6],cont[7],cont[8]])


    label = tf.to_int32(cont[0])

    min_after_dequeue = 10 * BATCH_SIZE
    capacity = 20 * BATCH_SIZE

    data_batch, label_batch_raw = tf.train.shuffle_batch([features, label], batch_size=BATCH_SIZE,
                                        capacity=capacity, min_after_dequeue=min_after_dequeue)
    label_batch_hot = tf.one_hot(label_batch_raw,on_value=1,off_value=0, depth=3)

    return data_batch, label_batch_hot

def get_model_params():
    """Build the model parameters."""
    W = tf.Variable(tf.zeros([N_FEATURES,CLASSES]), name='weights')
    b = tf.Variable(tf.zeros([CLASSES]), name = "bias")
    return W, b

def build_model(data_batch, label_batch_hot, w, b):
    """Use `W` and `b` to build a model based on some data and labels."""
    Y_predicted = tf.matmul(data_batch , w) + b
    cross_entropy = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(labels=label_batch_hot,
                                                logits=Y_predicted))
    return Y_predicted, cross_entropy

def get_optimizer_op(cross_entropy_op):
    """Return an optimiser associated to a cross entropy op."""
    return tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy_op)



def run():
    train_data, train_label = getPartitionedDatasets(["ABA_Train.csv"])
    test_data, test_label   = getPartitionedDatasets(["ABA_Test.csv"])
    W,b = get_model_params();
    train_predicted, train_cross_entropy = build_model(train_data, train_label, W, b)
    optimizer = get_optimizer_op(train_cross_entropy)

    test_predicted, test_cross_entropy = build_model(test_data, test_label, W, b)

    correct_prediction = tf.equal(tf.argmax(test_predicted, 1), tf.argmax(test_label, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


    with tf.Session() as sess:
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)
        sess.run(tf.global_variables_initializer())

        for i in range(300):  # generate 10 batches
            sess.run([optimizer])
        print(sess.run(accuracy))


def main():
    run();
if __name__ == '__main__':
    main()
def get_model_params():
    """Build the model parameters.""" 
    W = tf.Variable(tf.zeros([N_FEATURES,CLASSES]), name='weights')
    b = tf.Variable(tf.zeros([CLASSES]), name = "bias")
    return W, b

def build_model(data_batch, label_batch_hot, w, b):
    """Use `W` and `b` to build a model based on some data and labels."""
    Y_predicted = tf.matmul(data_batch , W) + b
    cross_entropy = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(labels=label_batch_hot,
                                                logits=Y_predicted))
    return y_predicted, cross_entropy

def get_optimizer_op(cross_entropy_op):
    """Return an optimiser associated to a cross entropy op."""
    return tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy_op)

def run():
    data_batch, label_batch_hot = batch_generator(train_filenames)
    test_data_batch, test_label_batch_hot = batch_generator(test_filenames)
    W, b = get_model_params()
    train_predicted, train_cross_entropy = build_model(data_batch, label_batch_hot, W, b)
    optimizer = get_optimizer_op(train_cross_entropy)

    test_predicted, test_cross_entropy = build_model(test_data_batch, test_label_batch_hot, W, b)

    with tf.Session() as sess:
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)
        sess.run(tf.global_variables_initializer())

        for i in range(300): # generate 10 batches
             sess.run([optimizer])
        sess.run(test_cross_entropy)