小编hal*_*o02的帖子

一个时期后过度拟合

我正在使用 Keras 训练模型。

model = Sequential()
model.add(LSTM(units=300, input_shape=(timestep,103), use_bias=True, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(units=536))
model.add(Activation("sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

while True:
        history = model.fit_generator( 
            generator = data_generator(x_[train_indices],
                    y_[train_indices], batch = batch, timestep=timestep),
                steps_per_epoch=(int)(train_indices.shape[0] / batch), 
                epochs=1, 
                verbose=1, 
                validation_steps=(int)(validation_indices.shape[0] / batch), 
                validation_data=data_generator(
                    x_[validation_indices],y_[validation_indices], batch=batch,timestep=timestep))
Run Code Online (Sandbox Code Playgroud)

这是一个符合 scikit-learn.org 定义的多输出分类:多 输出回归为每个样本分配一组目标值。这可以被认为是预测每个数据点的几个属性,例如某个位置的风向和大小.

因此,这是一个循环神经网络,我尝试了不同的时间步长。但结果/问题大致相同。

一个时期,我的火车损耗大约为0.0X和我的验证损耗大约为0.6X。并且这个值在接下来的 10 个 epoch 中保持稳定。

数据集大约有 680000 行。训练数据为 9/10,验证数据为 1/10。

我要求背后的直觉..

  • 我的模型在仅仅一个 epoch 之后就已经过拟合了吗?
  • 0.6xx 甚至是验证损失的好值吗?

高级问题:因此它是一个多输出分类任务(不是多类),我看到使用 sigmoid 和 binary_crossentropy 的唯一方法。你建议另一种方法吗?

cross-validation keras recurrent-neural-network

6
推荐指数
1
解决办法
2749
查看次数

二进制交叉熵惩罚一个热向量的所有分量

我了解到,在两个类的情况下,二进制交叉熵与分类交叉熵相同。

此外,对我来说,很明显softmax是什么。
因此,我看到分类交叉熵只是惩罚了应该为1的一个分量(概率)。

但是,为什么不能或者不应该在一个热向量上使用二进制交叉熵呢?

Normal Case for 1-Label-Multiclass-Mutual-exclusivity-classification:
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: categorical crossentropy 
                            = sum(label * -log(pred)) //just consider the 1-label
                            = 0.523
Why not that?
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: binary crossentropy
                            = sum(- label * log(pred) - (1 - label) * log(1 - pred))
                            = 1*-log(0.3)-log(1-0.1)-log(1-0.2)-log(1-0.4)
                            = 0.887
Run Code Online (Sandbox Code Playgroud)

我看到在二进制交叉熵中,是目标类,并且对应于以下一键编码:

target class zero …
Run Code Online (Sandbox Code Playgroud)

classification machine-learning multilabel-classification cross-entropy one-hot-encoding

5
推荐指数
1
解决办法
1081
查看次数

Stochastic Gradient Descent是否适用于TensorFlow?

我设计了一个MLP,完全连接,有2个隐藏和一个输出层.如果我使用批量或小批量梯度下降,我会得到一个很好的学习曲线.

但是在执行随机梯度下降(紫罗兰色)的过程中直线 在此输入图像描述

我弄错了什么?

根据我的理解,我使用Tensorflow进行随机梯度下降,如果我只提供一列火车/学习每个火车步骤的例子,例如:

X = tf.placeholder("float", [None, amountInput],name="Input")
Y = tf.placeholder("float", [None, amountOutput],name="TeachingInput")
...
m, i = sess.run([merged, train_op], feed_dict={X:[input],Y:[label]})
Run Code Online (Sandbox Code Playgroud)

因此输入是10分量矢量,标签是20分量矢量.

对于测试,我运行1000次迭代,每次迭代包含50个准备好的训练/学习示例中的一个.我期待一个overfittet nn.但正如你所见,它没有学习:(

由于nn将在在线学习环境中执行,因此不能选择小批量或批量梯度下降.

谢谢你的任何提示.

gradient-descent tensorflow

3
推荐指数
1
解决办法
1679
查看次数