【发布时间】:2018-09-28 10:04:21
【问题描述】:
我在 keras 中有一个神经网络。如果两个样本在归一化特征空间中彼此相距 0.001 个单位,则网络不会区分它们。网络能够区分这一点非常重要,因为这种差异在原始(非标准化)特征空间中并非微不足道。 有什么办法可以提高我的神经网络的分辨率?如果是这样,我应该改变哪些因素?
编辑:让我给你我用于 ANN 的代码。
编辑:数据集的描述:我正在使用 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 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))
【问题讨论】:
-
你有复制的例子吗?你的问题很广泛
-
是的,对不起。我已经包括了我的 ANN。不幸的是,由于保密问题,我无法提供数据。
-
然后提供一组说明问题的虚拟数据。
-
@Prune 是的,谢谢。我已经描述了一个虚拟数据集以及我在编辑中面临的问题。
-
我的关闭投票是有效的。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topic 和 how to ask 在这里申请。
标签: python-3.x machine-learning neural-network keras artificial-intelligence