【发布时间】:2017-10-23 16:53:37
【问题描述】:
我正在尝试从头开始构建一个可以对 MNIST 图像(手写数字)进行分类的模型。该模型需要输出一个概率列表,表示输入图像是某个数字的可能性有多大。
这是我目前的代码:
from sklearn.datasets import load_digits
import numpy as np
def softmax(x):
return np.exp(x) / np.sum(np.exp(x), axis=0)
digits = load_digits()
features = digits.data
targets = digits.target
train_count = int(0.8 * len(features))
train_x = features[: train_count]
train_y = targets[: train_count]
test_x = features[train_count:]
test_y = targets[train_count:]
bias = np.random.rand()
weights = np.random.rand(len(features[0]))
rate = 0.02
for i in range(1000):
for i, sample in enumerate(train_x):
prod = np.dot(sample, weights) - bias
soft = softmax(prod)
predicted = np.argmax(soft) + 1
error = predicted - train_y[i]
weights -= error * rate * sample
bias -= rate * error
# print(error)
我正在尝试构建模型,以便它使用随机梯度下降,但对于将什么传递给 softmax 函数我有点困惑。我知道它应该期望一个数字向量,但我习惯(在构建一个小型 NN 时)是模型应该产生一个数字,该数字被传递给一个激活函数,进而产生预测。在这里,我觉得我错过了一步,我不知道它是什么。
【问题讨论】:
标签: python machine-learning neural-network logistic-regression gradient-descent