私はこれらの画像に対して何らかの処理をしている3D脳画像のマトリックス配列を持っています。 Xは、脳のIDで、Yは、私がjoblib.Parallelは、異なるセットではなく、同じデータセットを複数回処理します。
次のシーケンシャルコードのためのいくつかの機能拡張を作るために、後でそれを再構築していたデータである完全にそれを行う:
入力行列は、M [X、Y]は次のようになります。
def transform(X):
data = np.reshape(X, (-1, 176, 208, 176))
data_cropped = np.empty((data.shape[0], 90, 100, 70))
for idx in range(0, data.shape[0]):
data_cropped[idx, :, :, :] = data[idx, 40:130, 40:140, 50:120]
data_cropped = perm(data_cropped)
#data_cropped = impute_data(data_cropped)
data_cropped = np.reshape(data_cropped, (data_cropped.shape[0], -1))
#data_cropped = data_cropped[:, np.apply_along_axis(np.count_nonzero, 0, data_cropped) != 0]
return data_cropped
X_train = np.load("./data_original/X_train.npy")
X_crop = transform(X_train)
このコード部分の出力(ループの通常)が順次実行されている:
脳:0
脳:1
脳:2
脳:3
...
問題は、それはすべての脳を処理するために(60分程度)非常に長い時間がかかることです。
コードを並行して実行しようとしていましたが、すべての脳を処理できませんでした。脳0のみが複数回処理されています。
ありコード並列化する私の試みです:
num_cores = multiprocessing.cpu_count()
X_train = np.load("./data_original/X_train.npy")
X_crop = Parallel(n_jobs=num_cores)(delayed(transform)(i) for i in X_train)
をしかし、私はこの結果を得た:
脳:0
脳:0
脳:0
を脳:0
...
どのようにこの問題を解決するか? おかげで
同じデータセットが処理されていますか? "brain:"という行の数字はどのように生成されますか? –
はい、それぞれの脳は同じデータを持っています。つまり、私がX_train.shapeを実行すると、私は278を取得します。6443008 – Kal
問題がこの文にあると思いますが、それを修正する方法はわかりません:Parallel(n_jobs = num_cores) (X_trainにおけるiの遅延(変換)(i)) – Kal