我尝试在一个简单的模型上训练一个简单的张量流网络,但是由于某种原因,它什么也没学。我会犯错吗?
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)
答案 0 :(得分:0)
根据我对您的数据集描述的理解,目标值列Y
是一个浮点数(实数值),可以在任意范围内,而不必在[0,1]区间内。
另一方面,因为您对模型的最后一层使用了sigmoid
激活。预测值将始终在[0, 1]
范围内。
我建议不要在最后一层使用sigmoid
激活。除非您的Y值也在[0,1]范围内。
因此,修改您的代码,使其成为
output = tf.layers.dense(hidden_2, 1, activation=None)