我在keras有一个神经网络。如果在归一化特征空间中它们彼此相距0.001个单位,则网络不区分两个样本。网络能够区分这一点非常重要,因为这种差异在原始(非标准化)特征空间中并不重要。 有什么方法可以提高神经网络的分辨率吗?如果是这样,我应该改变哪些因素?
编辑:让我给你我用于人工神经网络的代码。
编辑:数据集的描述:我使用2维数据集,其中x = [ - 1:1]和Y = [ - 1,1],两个连续点之间的步长为0.001尺寸。让类标签为半径为0.5且中心为(0,0)的圆内或圆上的任何东西都是正常的(1级),圆外的任何东西都是0(0级)。训练结束后,我使用相同的训练集作为测试集。正如现在所做的那样,圆上的边界点和边界内外的小邻域被分类为0.3到0.7。只有圆内的点是1,圆外的点是0.我认识到这是输出层上的S形激活函数的行为。我需要它来识别边界上的点和位于边界外的点之间的差异,0.001个单位之外,以及位于边界内的点,0.001个单位之外。
from keras.models import Sequential
from keras.layers import Dense
from sklearn.cross_validation import train_test_split as tts
from keras.callbacks import EarlyStopping as es
from keras import optimizers as op
"""Creating the model"""
model=Sequential()
model.add(Dense(12,input_dim=c,activation='relu')) #input layer (c is the dimensionality of my dataset)
for i in range(0,hidden_layer_size):
model.add(Dense(12,activation='relu')) #hidden layers
model.add(Dense(1,activation='sigmoid')) #output layer
"""Compiling the model"""
adam=op.Adam(lr=0.0007)
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
"""Fit the model"""
early=es(monitor='acc',min_delta=0.0005,patience=2)
model.fit(features_train,labels_train, epochs=epochs, batch_size=30,callbacks=[early],verbose=2)
"""Evaluation"""
scores=model.evaluate(features_test,labels_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
答案 0 :(得分:1)
神经网络中并没有真正的“分辨率”概念。如果您的模型对某些样本进行了错误分类,那么您需要更好的模型,或更多数据,甚至需要额外的正则化。
如果不广泛地测试模型,很难预测出了什么问题,所以这是你必须要做的事情。