【发布时间】:2018-05-07 22:05:42
【问题描述】:
我有以下形式的mnist培训列表:
def load_data():
f = gzip.open('mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = cPickle.load(f, encoding='latin1')
f.close()
def load_data_wrapper():
tr_d, va_d, te_d = load_data()
training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]]
training_results = [vectorized_result(y) for y in tr_d[1]]
training_data = list(zip(training_inputs, training_results))
........................................
现在我想对训练输入进行预处理,使其均值和单位方差为零。所以我在下面使用了from sklearn import preprocessing:
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
if test_data: n_test = len(test_data)
preprocessed_training = preprocessing.scale(training_data)
n = len(preprocessed_training)
for j in range(epochs):
random.shuffle(preprocessed_training)
mini_batches = [
training_data[k:k+mini_batch_size].....
....................
但是,我收到以下错误:
ValueError: setting an array element with a sequence.
我正在修改来自 mnielsen 的代码,该代码位于 here。一般来说,我是 python 和机器学习的新手。如果有人可以帮助我,我将不胜感激。 注意:如果您认为有更好的库选项,请也告诉我。
Update_1:这是我的另一次尝试,但出现了同样的错误。
scaler = StandardScaler()
scaler.fit(training_data)
training_data = scaler.transform(training_data)
if test_data: test_data = scaler.transform(test_data)
Update_2:我使用 pandas 数据框尝试了建议答案中提供的解决方案,但仍然遇到同样的错误。
Update_3 :所以它是对象类型,但我需要浮点类型来执行缩放器。我执行了以下操作:training_data = np.asarray(training_data).astype(np.float64),但我仍然收到错误消息!
Update_4:通用 mnist 数据集结构:50k 训练图像,10k 测试图像。在 50k 幅图像中,每幅图像为 28 * 28 像素,即 784 个数据点。例如,MNIST 中的一个数据点,如果它的原始输出是 5,那么它就是 (array([ 0., 0., 0., ..., 0., 0., 0.], dtype=float32), 5) tuple。可以看到 tuple 中的第一个元素是一个稀疏矩阵。Here 是训练数据集的一个示例,第一个元素元组(即具有 784 个灰度浮点数的输入图像)。沿着元组的第二个元素,我们只是将输出作为数字 0 到 9。但是,在一个热编码中,我们给出一个 10D 向量,其中所有索引值都是零除了输出值的索引。所以对于数字 5,它将是 [[0],[0],[0],[0],[0],[1],[0],[0],[0],[0]]。我正在使用的包装器修改可以在 here 找到。
【问题讨论】:
标签: python numpy machine-learning scikit-learn neural-network