我在keras中有一个神经网络。如果两个样本在归一化特征空间中相差0.001单位,网络无法区分它们。这在原始(非归一化)特征空间中是非常重要的,因为这种差异并非微不足道。我能否提高我的神经网络的分辨率?如果可以,我应该改变哪些因素?
编辑:让我给你看一下我用于人工神经网络的代码。
编辑:数据集描述:我使用了一个二维数据集,x=[-1:1]和Y=[-1,1],两个连续点之间的步长为0.001。设定类别标签,使得半径为0.5且中心在(0,0)的圆内或圆上的任何点为正常(类别1),圆外的任何点为0(类别0)。训练后,我使用相同的训练集作为测试集。目前,圆上的边界点以及边界内外的小邻域被分类为0.3到0.7。只有圆内深处的点为1,圆外深处的点为0。我认识到这是输出层使用sigmoid激活函数的行为。我需要它能够识别边界上的点与刚好在边界外0.001单位的点,以及刚好在边界内0.001单位的点之间的差异。
from keras.models import Sequentialfrom keras.layers import Densefrom sklearn.cross_validation import train_test_split as ttsfrom keras.callbacks import EarlyStopping as esfrom 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 layersmodel.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))
回答:
神经网络中并没有“分辨率”的概念。如果你的模型误分类了一些样本,那么你要么需要一个更好的模型,要么需要更多的数据,甚至可能需要额外的正则化。
没有经过广泛的测试,很难预测问题出在哪里,所以这是你必须要做的工作。