tensorflow上的NN不训练

时间:2019-05-06 19:13:42

标签: tensorflow

我尝试在一个简单的模型上训练一个简单的张量流网络,但是由于某种原因,它什么也没学。我会犯错吗?

X, Y = read_data(file_name)

# CONSTRUCT GRAPH
x_t = tf.placeholder(shape=[None, X.shape[1]], dtype=tf.float32)
y_t = tf.placeholder(shape=[None,], dtype=tf.float32)

hidden_1 = tf.layers.dense(x_t, 50, activation=tf.nn.sigmoid)
hidden_2 = tf.layers.dense(hidden_1, 50, activation=tf.nn.sigmoid)
output = tf.layers.dense(hidden_2, 1, activation=tf.nn.sigmoid)

# DEFINE LOSS AND OPTIMIZER
loss = tf.reduce_mean(tf.square(output - y_t))
GD_optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_step = GD_optimizer.minimize(loss)

# BATCH SIZE
BATCH_SIZE = 20

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(15000):
        rand_indices = np.random.choice(X.shape[0], size=BATCH_SIZE)

        x_batch = X[rand_indices,:]
        y_batch = Y[rand_indices]

        _, temp_loss = sess.run([train_step, loss], feed_dict={x_t: x_batch, y_t: y_batch})
        print(temp_loss)

1 个答案:

答案 0 :(得分:0)

根据我对您的数据集描述的理解,目标值列Y是一个浮点数(实数值),可以在任意范围内,而不必在[0,1]区间内。

另一方面,因为您对模型的最后一层使用了sigmoid激活。预测值将始终在[0, 1]范围内。

我建议不要在最后一层使用sigmoid激活。除非您的Y值也在[0,1]范围内。

因此,修改您的代码,使其成为

output = tf.layers.dense(hidden_2, 1, activation=None)