1

我正在训练编写一个分布式 keras 模型,其中数据和模型本身都可以在 spark 上并行运行。问题是,我正在使用 3-d 形状图像数据作为输入,但我不确定如何从我的 3d 形状 numpy 数组制作数据帧,以通过系统 ml 训练我的 keras 模型。我正在使用预训练的 xception keras 模型,因此我的输入需要采用 (300,300,3) 的形状

我正在关注链接

from sklearn import datasets, neighbors
from pyspark.sql import DataFrame, SQLContext
import systemml as sml
import pandas as pd
import os, imp
sqlCtx = SQLContext(sc)
digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target + 1
n_samples = len(X_digits)
# Split the data into training/testing sets and convert to PySpark DataFrame
X_df = sqlCtx.createDataFrame(pd.DataFrame(X_digits[:.9 * n_samples]))
y_df = sqlCtx.createDataFrame(pd.DataFrame(y_digits[:.9 * n_samples]))
ml = sml.MLContext(sc)
# Get the path of MultiLogReg.dml
scriptPath = os.path.join(imp.find_module("systemml")[1], 'systemml-java', 'scripts', 'algorithms', 'MultiLogReg.dml')
script = sml.dml(scriptPath).input(X=X_df, Y_vec=y_df).output("B_out")
beta = ml.execute(script).get('B_out').toNumPy()

但是当我使用 3d 形状的 numpy 数组时出现问题,我无法将其转换为 spark 数据帧,它要求我提供 2d 形状的数组。

l=np.array([[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]]])
l.shape
(2, 3, 2)
X_df = sqlCtx.createDataFrame(pd.DataFrame(l))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\KMOB\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py", line 424, in __init__
    copy=copy)
  File "C:\Users\KMOB\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 146, in init_ndarray
    values = prep_ndarray(values, copy=copy)
  File "C:\Users\KMOB\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 249, in prep_ndarray
    raise ValueError('Must pass 2-d input')
ValueError: Must pass 2-d input

有没有人对此有任何解决方案?

4

0 回答 0