张量流多感知器的零成本

时间:2017-05-22 18:07:25

标签: tensorflow neural-network

我建立了一个简单的神经网络,只将数据分类为2类 数据是这样的

34.62365962451697,78.0246928153624,0
60.18259938620976,86.30855209546826,1

数据中没有零值,因此没有这样的成本来源。使用adagrad优化器和带梯度下降优化器的nan,成本为零 这是代码

import numpy as ny
import tensorflow as tf


def load():
    data = []
    for line in open("ex2data1.txt"):
        row = line.split(',')
        x = ny.array(row, dtype='|S4')
        data.append(x.astype(ny.float64))
    return ny.array(data)


def multilayer_perceptron(x, weights, biases):
    # Hidden layer with ReLU activation
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)
    # Hidden layer with ReLU activation
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)
    # Output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer

# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([2, 15])),
    'h2': tf.Variable(tf.random_normal([15, 15])),
    'out': tf.Variable(tf.random_normal([15, 1]))
}
biases = {
    'b1': tf.Variable(tf.random_normal([15])),
    'b2': tf.Variable(tf.random_normal([15])),
    'out': tf.Variable(tf.random_normal([1]))
}

data = load()
Xdata = ny.array(data[:, 0:2])
Ydata = ny.array(data[:, 2])
Ydata = ny.array(Ydata.reshape([100, 1]))
# Step 2 - Create input and output placeholders for data
X = tf.placeholder("float", [None, 2], name="X")
Y = tf.placeholder("float", [None, 1], name="Y")

pred = multilayer_perceptron(X, weights, biases)


# Minimize error using cross entropy
with tf.name_scope("cost"):
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=Y))
    optimizer = tf.train.AdagradOptimizer(0.001).minimize(cost)
    tf.summary.scalar("cost", cost)

init = tf.global_variables_initializer()
summary_op = tf.summary.merge_all()
with tf.Session() as sess:
    sess.run(init)

    print(Xdata)
    print(Ydata)

    # Step 12 train the  model
    for i in range(1000):
        sess.run(optimizer, feed_dict={X: Xdata, Y: Ydata})
        if (i % 100 == 0):
            print(sess.run(cost, feed_dict={X: Xdata, Y: Ydata}))

1 个答案:

答案 0 :(得分:0)

通过表示标签的方式,您不应使用此损失功能。我认为this是相关的