为何最简神经网络性能不及Logistic回归?
新手神经网络训练困境:无法完成简单二分类任务
训练数据生成
使用以下代码生成线性可分的二分类训练数据,包含1024个样本、2个有效特征,无冗余特征:
X, y = make_classification(n_samples=1024,n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=2)
手动实现的神经网络代码
import numpy as np from sklearn.datasets import make_classification def f(x): return 1/(1+np.exp(-x)) def df(x): return f(x)*(1-f(x)) def init(): np.random.seed(42) W1 = np.random.rand(2,2) W2 = np.random.rand(1,2) return W1,W2 def go_forward(inp,W1,W2): sum = np.dot(W1,inp) out = np.array([f(x) for x in sum]) sum_1 = np.dot(W2,out) out_1 = f(sum_1) y = 1 if out_1>0.5 else 0 return (y,out) def train_one_epoch(X_train,y_train,W2,W1,lr): err = [] for k in range(len(X_train)): ind = np.random.randint(0,len(X_train)) x,y = X_train[ind],y_train[ind] pred, out = go_forward(x,W1,W2) e = pred - y delta = e*df(pred) W2 = W2 - lr*delta*out delta2 = W2*delta*df(out) W1 = W1 - np.array(x)*delta2*lr err.append(e) return W1,W2,np.mean(np.array(err)) epoch = 100 lr = 0.01 err = [] W1,W2 = init() for e in range(epoch): W1,W2,e = train_one_epoch(X_train,y_train,W2,W1,lr) err.append(e)
训练结果问题
- 误差表现:训练误差曲线无明显下降趋势,收敛效果极差
- 准确率对比:
- 手动实现网络:0.751953125
- sklearn逻辑回归模型:0.974609375
- 分类结果差异:测试数据呈现清晰的可分边界,手动网络的分类边界混乱,无法有效区分样本;逻辑回归模型则能精准划分两类样本
疑问
明明是简单的线性可分二分类任务,手动实现的神经网络却无法有效解决,调整训练轮数(epoch)也没有改善,问题出在哪里?
内容的提问来源于stack exchange,提问作者Berezin_Daniil
相关产品推荐
相关产品推荐

