通过数据的方法是什么?

时间:2017-12-12 10:30:29

标签: python python-3.x machine-learning tensorflow

我正在使用Tensorflow,但我对Python和机器学习都很陌生。如果我的输入管道中有一个图像张量,那么训练它的最佳方法是什么?就像在基础知识中一样,我如何处理传递数据?我有我想要使用的结构(我知道我可以从张量等某些东西获得某些数据),但我不知道该怎么做。

我对此非常陌生,所以非常感谢所有的帮助。

def model(image_tensor):
    tf.summary.image(img)

    return predictions

def loss(predictions, labels):

    return some_loss

def train(some_loss):

    return train_op

1 个答案:

答案 0 :(得分:0)

对于刚接触机器学习和python的人来说,Tensorflow可能有点复杂。我的建议是通过tensorflow站点上的优秀笔记本教程,并开始理解抽象。

然而,在此之前,我会使用python与numpy(有时是scipy)来实现Stochastic Gradient Descent等基本机器方法,以确保您了解算法的工作原理。然后实现简单的逻辑回归。

那么我为什么要求你这么做呢?好吧,因为一旦你很好地掌握了如何使用机器学习算法以及找到渐变的繁琐程度,你就会明白为什么张量流抽象是有用的。

我将为您提供一些处理MNIST的简单示例。

from sklearn.datasets import load_digits
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np


mnist = load_digits(2)
print("y [shape: {}] {}] : {}".format(y.shape,y[:10]))
print("x [shape: {}] {}]".format(x.shape)

我上面基本上完成的是从MNIST数据集(0和1)加载两位数字并显示矢量y和矩阵(x)的数组。 如果您想了解图片的外观,可以plt.imshow(X[0].reshape([8,8])) 下一步是开始定义占位符和变量

input_x = tf.placeholder(tf.float32,shape=[None,X.shape[1]], name     = "input_x")
input_y = tf.placeholder(tf.float32,shape=[None,],name = "labels")
weights = tf.Variable(initial_value = tf.zeros(shape=[X.shape[1],1]), name="weights")
b = tf.Variable(initial_value=0.0, name = "bias")

我们在这里完成了在tensorflow中定义了两个占位符,并告诉了变量应该作为输入的期望。我还给占位符一个名称以便进行调试。

prediction_y = tf.squeeze(tf.nn.sigmoid(tf.add(tf.matmul(input_x,weights),tf.cast(b,tf.float32))))
loss = tf.losses.log_loss(input_y,prediction_y)
optimizer = tf.train.Adamoptimizer(0.001).minimize(loss)

你去了,这是张量流中的逻辑回归。最后一个块的作用是将激活函数应用于我们的输入向量,定义损失函数,然后为损失函数定义一个优化器。

最后一步是运行它。

from sklearn.metrics import roc_auc_score
s.run(tf.global_variables_initializer())
for i in range(10):
    s.run(optimizer,{input_X:X_train, input_y: y_train})
    loss_i = s.run(loss, {input_x:x_train,input_y:y_train})
    print("loss at iteration {}: {}".format(i, loss_i))

这基本上就是你通过tensorflow运行数据的方式。这段代码可能有拼写错误,我在这台机器上没有python,所以我根据内存写作。然而,基本的想法是存在的。希望这会有所帮助。

编辑:此外,您还询问了培训图像数据的最佳方法。我对你的回答是没有最好的"。建立CNN是一种典型的方法,您可能希望在假设您拥有大量分类图像的情况下进行实验。在此之前,人们还相对较好地使用支持向量来分类图像。