tensorflow中的张量类型

时间:2017-10-18 05:07:52

标签: python tensorflow neural-network

我一直在努力使用估算器类在tensorflow中创建一个简单的分类器。 (学习张量流以利用一些高级功能,而不是使用Keras,这确实使这个问题变得简单,有时学习很难。我离题了。)

我在这里找到了MNIST数据的原始教程: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/neural_network.ipynb

我为自己的数据写了一个新的输入函数(

Xtrain.shape =(595212,57)

target.shape =(595212):

import pandas as pd
train=pd.read_csv("../input/train.csv")
test=pd.read_csv("../input/train.csv")
target=train['target']
Xtrain=train.drop(['id','target'],axis=1)
# Define the input function for training
input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'data': Xtrain.as_matrix()}, y=target,
    batch_size=batch_size, num_epochs=1, shuffle=True)

我终于得到了一个二进制分类器,用于我自己的数据工作。但是我不得不修改神经网络(我是通过反复试验来做到的,没有太多的理解和解释来破译错误代码)。

我不得不对下一个标签的输出进行重新整形。但我不知道为什么我需要这样做。我在整个晚上以张力维度挣扎,我真的很茫然(没有双关语),为什么需要这些修改。我认为它与底层数据流有关,但我似乎无法理解出错的原因或为什么需要这样做。

原始代码在' ####'描述的部分中注释掉了。 显然,对于二进制分类,我删除了softmax并切换到当前的损失。

我的模型定义为:

# Define the model function (following TF Estimator Template)
def model_fn(features, labels, mode):

    # Build the neural network
    logits = neural_net(features)

    # Predictions
    pred_classes = tf.argmax(logits, axis=1)
    pred_probas = tf.nn.sigmoid(logits)

    # If prediction mode, early return
    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode, predictions=pred_probas) 

    # Define loss and optimizer
    #############################################################
    #loss_op = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
    #    logits=logits, labels=tf.cast(labels, dtype=tf.int32)))
    loss_op = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
        logits=tf.reshape(logits,[-1]), labels=tf.cast(labels, dtype=tf.float64)))
    ###########################################################
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
    train_op = optimizer.minimize(loss_op, global_step=tf.train.get_global_step())

    # TF Estimators requires to return a EstimatorSpec, that specify
    # the different ops for training, evaluating, ...
    estim_specs = tf.estimator.EstimatorSpec(
      mode=mode,
      predictions=pred_probas,
      loss=loss_op,
      train_op=train_op)


    return estim_specs

0 个答案:

没有答案