我有以下形式的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 dataframe尝试了建议答案中提供的解决方案,但我仍然遇到同样的错误。
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)
元组。你可以看到元组中的第一个元素是稀疏矩阵。{{3是训练数据集的一个例子,元组的第一个元素(即输入图像有784个灰度浮点数)。沿着元组的第二个元素,我们只输出数字0到9。但是,在一个热编码中,我们给出一个10D向量,其中所有索引值都是零,除了输出值的索引。因此对于数字5,它将是[[0],[0],[0],[0],[0],[1],[0],[0],[0],[0]]
。我可以找到我使用的包装器修改{{3 }}
答案 0 :(得分:0)
我以一种不同的方式做到这一点。回想一下,您必须通过所有训练数据构建的相同功能来扩展训练和测试集。此外,您只想操纵您的功能。我首先会转换为列车和测试数据框以及功能列表。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(train[features])
X_train = pd.DataFrame(scaler.transform(train[features]),columns = train[features].columns)
X_test = pd.DataFrame(scaler.transform(test[features]),columns = test[features].columns)
这有用吗?您是否有理由需要使用批次?
答案 1 :(得分:0)
我遇到的问题是因为from sklearn.preprocessing import StandardScaler
改变了我的数据维度。我没有使用StandardScaler
,而是在preprocessing.scale
dim数据集中为每个输入使用了(50k,(784,1))
。也就是说,我对axis = 1
上的每个(784,1)数据使用了scale函数,并使用for循环添加它们。这减慢了程序,但工作。如果有人知道更好的方法,请在答案部分告诉我。