设置每个图层的名称后,下面的我的代码运行良好 .
=================== old ===============
如何使用不同dim的多个输入定义TensorFlow图?例如,我的输入(X1,X2,X3)具有不同的暗淡(d1,d2,d3) . 如何定义一个多输入层结合不同大小的hidden-1层,然后将三个hidden-1层组合到hidden-2层,然后用一个输出层?谢谢大家!我尝试了一些这样的代码:model_fn(features,labels,mode,params):
input_layers = [tf.feature_column.input_layer(features=features, feature_columns=params["feature_columns"][i]) for i, fi in enumerate(FEA_DIM)]
hidden1 = [tf.layers.dense(input_layers[i], H1_DIM[i], tf.nn.selu) for i, _ in enumerate(FEA_DIM)]
hidden1_c = tf.concat(hidden1, -1, "concat")
hidden2 = tf.layers.dense( inputs=hidden1_c, units=32, activation=tf.nn.selu, )
predictions = tf.layers.dense(inputs=hidden2, units=NCLASS, activation=tf.nn.softmax)
labels = tf.contrib.layers.one_hot_encoding(labels, NCLASS)
loss = tf.losses.sigmoid_cross_entropy(labels, predictions)
optimizer = tf.train.AdamOptimizer(learning_rate=1)
train_op = optimizer.minimize( loss=loss, global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec( mode=mode, loss=loss, train_op=train_op)
但它确实't work: the accuracy is unchange at training time. and the tensorboard'的模型图是(dense_xx是hidden1的张量):
2 回答
最大的问题在于这些方面
首先,由于你有多个类,你应该使用
softmax_cross_entropy
,或者更好,sparse_softmax_cross_entropy
来免除一个热门编码 .其次,
softmax_cross_entropy
或sigmoid_cross_entropy
的输入应该是非标准化分数,所以activation=tf.nn.softmax
是错误的 . 所有深度学习框架都将softmax / sigmoid与交叉熵一步组合在一起,因为组合操作具有更好的性能和数值稳定性,因此您不应该首先自己计算softmax .第三,你的学习率太高了 . 在大多数情况下,甚至0.0025仍然太高 . 你应该从0.001开始,然后从那里上下调整 .
最后,我不明白为什么你先
dense
然后concat
. 为什么不连接所有功能然后一起转换?有关如何连接图层,请提供完整的运行代码示例: