有时训练完全失败,整个训练的准确性保持不变。在另一种情况下,ANN可以通过足够的迭代完美地适应。
我的ANN没有任何中间层。只有K个输入和一个输出。其中一个功能就是输出。这只是一个玩具模型我想测试我更复杂的模型。 实际上,问题也出现在"高" -dimonsional输入中。
我也改变了优化器,学习率等等。它在几台主机上运行。代码是一个黑客但显示问题。
有谁可以指出这个问题?谢谢!
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
import numpy as np
model = Sequential()
a = np.array( range(1,100) ) # one vector
#X_train = a # is working, OK
X_train = np.squeeze(np.hstack((
a[:,None],
a[:,None]+10,
a[:,None]+20,
a[:,None]+30,
a[:,None]+40,
a[:,None]+50,
a[:,None]+50,
a[:,None]+50,
a[:,None]+50,
a[:,None]+100,
a[:,None]+100,
a[:,None]+100,
a[:,None]+100,
a[:,None]+100,
a[:,None]+100,
a[:,None]*10,
a[:,None]*10,
a[:,None]*10,
a[:,None]*10,
a[:,None]*100,
a[:,None]*100,
a[:,None]*100,
a[:,None]*100,
a[:,None]*100,
a[:,None]*100,
a[:,None]*100,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01,
a[:,None]*0.01
)))
model.add(Dense( 1, input_dim=np.size(X_train[0,:])) # in
model.add(Dense(1,activation="relu")) # out
'''
https://keras.io/optimizers/#adam
'''
optimizer = keras.optimizers.Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(
loss="mean_squared_error",
optimizer=optimizer)
#metrics=['accuracy'])
Y_train = a
model.fit( X_train, Y_train,
nb_epoch=200,
batch_size=10 )
X_test = X_train # training equals test set
Y_test = Y_train
score = model.evaluate(X_test, Y_test, batch_size=16)
print(str(score))
outputPred = model.predict(X_test)
print("X_train:" +str(X_train))
print("Y_train:" +str(Y_train))
print("prediction is")
print(str(outputPred))
答案 0 :(得分:-1)
似乎优化器需要适当的格式。即使输入位于域[0,K]中,也无法通过激活" relu"来优化输入。
规范化有助于:使输入和输出数据居中,带来改进。此外,但不是必需的,更小的范围,例如wdith为1。
激活" relu "仅适用于这种不错的数据格式。
激活" tanh "在小范围内收敛得更好(max-min = 1)。
在显示的极端测试案例中," 线性"突然收敛。
总而言之,如果数据采用优化程序无法处理的格式,则培训可能会失败。即使它很容易实现,例如在一个输入和单个输出之间的1:1映射。
在正确的层次上考虑兼容激活。考虑到成功还取决于优化器,损失函数和度量。