- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
无论我使用什么优化器、准确性或损失指标,我的准确性都会快速收敛(在 10-20 个时期内),而我的损失会持续减少(>100 个时期)。我已经尝试了 Keras 中可用的每个优化器,并且出现了相同的趋势(尽管有些优化器收敛速度较慢,并且精度比其他优化器稍高,其中 nAdam、Adadelta 和 Adamax 表现最好)。
我的输入是 64x1 数据向量,输出是表示真实空间中 3D 坐标的 3x1 向量。我有大约 2000 个训练样本和 500 个测试样本。我使用 scikit learn 预处理工具箱中的 MinMaxScaler 对输入和输出进行标准化,并且还使用 scikit learn shuffle 函数对数据进行洗牌。我使用 test_train_split 来洗牌我的数据(具有指定的随机状态)。这是我的 CNN:
def cnn(pretrained_weights = None,input_size = (64,1)):
inputs = keras.engine.input_layer.Input(input_size)
conv1 = Conv1D(64,2,strides=1,activation='relu')(inputs)
conv2 = Conv1D(64,2,strides=1,activation='relu')(conv1)
pool1 = MaxPooling1D(pool_size=2)(conv2)
#pool1 = Dropout(0.25)(pool1)
conv3 = Conv1D(128,2,strides=1,activation='relu')(pool1)
conv4 = Conv1D(128,2,strides=1,activation='relu')(conv3)
pool2 = MaxPooling1D(pool_size=2)(conv4)
#pool2 = Dropout(0.25)(pool2)
conv5 = Conv1D(256,2,strides=1,activation='relu')(pool2)
conv6 = Conv1D(256,2,strides=1,activation='relu')(conv5)
pool3 = MaxPooling1D(pool_size=2)(conv6)
#pool3 = Dropout(0.25)(pool3)
pool4 = MaxPooling1D(pool_size=2)(pool3)
dense1 = Dense(256,activation='relu')(pool4)
#drop1 = Dropout(0.5)(dense1)
drop1 = dense1
dense2 = Dense(64,activation='relu')(drop1)
#drop2 = Dropout(0.5)(dense2)
drop2 = dense2
dense3 = Dense(32,activation='relu')(drop2)
dense4 = Dense(1,activation='sigmoid')(dense3)
model = Model(inputs = inputs, outputs = dense4)
#opt = Adam(lr=1e-6,clipvalue=0.01)
model.compile(optimizer = Nadam(lr=1e-4), loss = 'mse', metrics = ['accuracy','mse','mae'])
我尝试了额外的池化(如我的代码中所示)来规范我的数据并减少过度拟合(如果这是问题所在),但无济于事。这是使用上述参数的训练示例:
model = cnn()
model.fit(x=x_train, y=y_train, batch_size=7, epochs=10, verbose=1, validation_split=0.2, shuffle=True)
Train on 1946 samples, validate on 487 samples
Epoch 1/10
1946/1946 [==============================] - 5s 3ms/step - loss: 0.0932 - acc: 0.0766 - mean_squared_error: 0.0932 - mean_absolute_error: 0.2616 - val_loss: 0.0930 - val_acc: 0.0815 - val_mean_squared_error: 0.0930 - val_mean_absolute_error: 0.2605
Epoch 2/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0903 - acc: 0.0783 - mean_squared_error: 0.0903 - mean_absolute_error: 0.2553 - val_loss: 0.0899 - val_acc: 0.0842 - val_mean_squared_error: 0.0899 - val_mean_absolute_error: 0.2544
Epoch 3/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0886 - acc: 0.0807 - mean_squared_error: 0.0886 - mean_absolute_error: 0.2524 - val_loss: 0.0880 - val_acc: 0.0862 - val_mean_squared_error: 0.0880 - val_mean_absolute_error: 0.2529
Epoch 4/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0865 - acc: 0.0886 - mean_squared_error: 0.0865 - mean_absolute_error: 0.2488 - val_loss: 0.0875 - val_acc: 0.1081 - val_mean_squared_error: 0.0875 - val_mean_absolute_error: 0.2534
Epoch 5/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0849 - acc: 0.0925 - mean_squared_error: 0.0849 - mean_absolute_error: 0.2461 - val_loss: 0.0851 - val_acc: 0.0972 - val_mean_squared_error: 0.0851 - val_mean_absolute_error: 0.2427
Epoch 6/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0832 - acc: 0.1002 - mean_squared_error: 0.0832 - mean_absolute_error: 0.2435 - val_loss: 0.0817 - val_acc: 0.1075 - val_mean_squared_error: 0.0817 - val_mean_absolute_error: 0.2400
Epoch 7/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0819 - acc: 0.1041 - mean_squared_error: 0.0819 - mean_absolute_error: 0.2408 - val_loss: 0.0796 - val_acc: 0.1129 - val_mean_squared_error: 0.0796 - val_mean_absolute_error: 0.2374
Epoch 8/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0810 - acc: 0.1060 - mean_squared_error: 0.0810 - mean_absolute_error: 0.2391 - val_loss: 0.0787 - val_acc: 0.1129 - val_mean_squared_error: 0.0787 - val_mean_absolute_error: 0.2348
Epoch 9/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0794 - acc: 0.1089 - mean_squared_error: 0.0794 - mean_absolute_error: 0.2358 - val_loss: 0.0789 - val_acc: 0.1102 - val_mean_squared_error: 0.0789 - val_mean_absolute_error: 0.2337
Epoch 10/10
1946/1946 [==============================] - 2s 1ms/step - loss: 0.0785 - acc: 0.1086 - mean_squared_error: 0.0785 - mean_absolute_error: 0.2343 - val_loss: 0.0767 - val_acc: 0.1143 - val_mean_squared_error: 0.0767 - val_mean_absolute_error: 0.2328
我很难诊断问题所在。我需要额外的正规化吗?以下是输入向量和相应的基本事实的示例:
input = array([[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[5.05487319e-04],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[2.11865474e-03],
[6.57073860e-04],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[8.02714614e-04],
[1.09597877e-03],
[5.37978732e-03],
[9.74035809e-03],
[0.00000000e+00],
[0.00000000e+00],
[2.04473307e-03],
[5.60562907e-04],
[1.76158615e-03],
[3.48869003e-03],
[6.45111735e-02],
[7.75741303e-01],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[1.33064182e-02],
[5.04751340e-02],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[5.90069050e-04],
[3.27240480e-03],
[1.92582590e-03],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[0.00000000e+00],
[4.50609885e-04],
[1.12957157e-03],
[1.24890352e-03]])
output = array([[0. ],
[0.41666667],
[0.58823529]])
这是否与数据标准化方式或数据的性质有关?我只是没有足够的数据吗?任何见解都是值得赞赏的,我已经尝试了许多其他帖子的建议,但还没有任何效果。谢谢!
最佳答案
您的问题有几个问题...
首先,您的训练和验证精度肯定不会像您声称的那样“快速收敛”(两者都从 0.07 到 ~ 0.1);但即使是这种情况,我也不明白这会是一个问题(通常人们会提示相反的情况,即准确性不收敛,或者收敛得不够快) )。
但是所有这些讨论都是无关紧要的,因为您处于回归设置中,其中准确性毫无意义;事实是,在这种情况下,Keras 不会通过警告或其他方式“保护”您。您可以在What function defines accuracy in Keras when the loss is mean squared error (MSE)?中找到讨论有用(免责声明:答案是我的)。
因此,您应该按如下方式更改 model.compile
语句:
model.compile(optimizer = Nadam(lr=1e-4), loss = 'mse')
即这里不需要 metrics
(同时测量 mse
和 mae
听起来有点大材小用 - 我建议只使用其中之一)。
Is the "mode" I'm in (in this case, regression) only dictated by the type of activation I use in the output layer?
没有。 “模式”(回归或分类)由您的损失函数决定:mse
和 mae
等损失意味着回归设置。
这给我们带来了最后一个问题:除非您知道您的输出仅在 [0, 1] 中取值,否则您不应该不使用 sigmoid
作为激活函数最后一层; 线性
激活通常用于回归设置,即:
dense4 = Dense(1,activation='linear')(dense3)
由于线性
激活是 Keras 中的默认激活( docs ),因此甚至不需要明确需要,即:
dense4 = Dense(1)(dense3)
也能完成这项工作。
关于machine-learning - Keras CNN - 损失不断减少,但准确率快速收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54096140/
我有几个关于我的遗传算法和整体 GA 的问题。 我创建了一个 GA,当给定一条曲线时,它会尝试找出产生这条曲线的函数。 例子如下积分 {{-2, 4},{-1, 1},{0, 0},{1, 1},{2
我正在尝试编写一个 GA 来解决以下难题... 二进制编码(我认为)非常有效。每件作品可以是: 原始向上或翻转的方式 - 1 位 旋转 0(即无)、90、180 或 270 度 - 2 位 在位置 (
我正在编写一个小代码(顺序)来计算适度数据集的网页排名(尽管并非完全微不足道)。 算法是这样的: while ( not converged ) { // Do a bunch of thing
我正在尝试检测长时间序列中的微事件。为此,我将训练一个 LSTM 网络。 数据。每个时间样本的输入是 11 个不同的特征,经过一定程度的标准化以适合 0-1。输出将是两个类之一。 批处理。由于巨大类别
我试图通过使用 optim 函数在 R 中找到最佳 GARCH 模型的参数。但是,我的值(value)观会变得很高,这是没有意义的。我在 MATLAB 中使用 fminsearch 实现了类似的算法,
我运行了 20 倍 cv.glmnet 套索模型以获得 lambda 的“最佳”值。但是,当我尝试重现 glmnet() 的结果时,我收到一条错误消息: Warning messages: 1: fr
我在 dymola 中构建了一个模型。虽然在初始化过程中出现了一些错误,但最终还是计算成功了。 模型收敛成功后,我尝试使用“在模型中保存起始值”选项将正确的迭代变量 strat 值存储到模型中,以便模
我有一个分层 Logit,可以随着时间的推移进行观察。正在关注Carter 2010 ,我添加了时间、时间^2 和时间^3 术语。在添加时间变量之前,模型会使用 Metropolis 或 NUTS 进
再次感谢您花时间阅读这篇文章。 我知道这个问题已经被问了很多,而且我已经检查了很多关于这个问题的帖子:然而,我对使用反向传播的成功 XOR 学习的探索仍未完成。 我按照建议尝试调整学习率、动量、有/无
我是一名优秀的程序员,十分优秀!