質問下部に示すPythonのコードで,以下のエラーメッセージが出て対処の仕方がわかりません.
Traceback (most recent call last):
File "LSVM_multi.py", line 62, in <module>
with multiprocessing.Pool(Thread_num) as p:
AttributeError: __exit__
下記のPythonのコードをどのように修正したらよいかご教授宜しくお願いします.
#!/usr/bin/env python
# coding: utf-8
from sklearn import svm
import numpy as np
import csv
import multiprocessing
inputFilename = "tvCorrelationCoefALL_NTrials.csv"
outputFilename = "result_linearSVM_L2_L2.csv"
# csv読み込み
# 1次元: [1列目, 2列目] = [係数, (クラス1, クラス2) = (1, -1)]
data = np.loadtxt(inputFilename, delimiter=",")
X = data[:,0] # 係数を取得
y = data[:,1] # クラスラベルを取得
print("file read complete")
X = X.reshape(-1, 1)
# --------------------------------------
# 試行回数(中央値をとるため奇数)
iteration = 101
iteration += 1
# 使用するCPUコア数
Thread_num = 2
# 結果格納の配列
result = []
def getArr(X,y):
iterArr = []
# for文でCの最適値を算出
for i in [1]+list(range(10, 10001, 10)):
# 線形SVMのインスタンスを生成
model = svm.LinearSVC(penalty='l2', loss='squared_hinge',dual=True, C=i, max_iter=1000000)
# モデルの学習.fit関数
model.fit(X, y)
# 境界線
line = -model.intercept_ / model.coef_
# 配列
iterArr.append(line)
return iterArr
def wrapper_getArr(args):
return getArr(*args)
for k in range(0, int(iteration/Thread_num), 1):
variable = []
for i in range(Thread_num):
variable.append([X,y])
with multiprocessing.Pool(Thread_num) as p:
# (X,y)
iterArr = p.map(wrapper_getArr, variable)
for temp in iterArr:
# 配列に連結
result.append(temp)
# 確認
print(k)
# 結果をCSV出力
with open(outputFilename, 'w') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(result)
print("Program end")