タイトル通りですが、機械学習のためローカルから画像を取り出すために以下のコードを使った際、エラーが次のように出てしまいます。
img_A = np.array(Image.fromarray((img_A * 255).astype(np.uint8)).resize(self.img_res, img_A))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
このエラーについてこちらで確認したのですが、どれも対処法としては今回適さないようなので、こちらで質問させていただきます。
コードは次の通りです。
class DataLoader(): def __init__(self, dataset_name, img_res=(128, 128)): self.dataset_name = dataset_name self.img_res = img_res def load_batch(self, batch_size=1, is_testing=False): data_type = "train" if not is_testing else "val" path_A = glob('./gan_datasets/%s/%sA/*' % (self.dataset_name, data_type)) path_B = glob('./gan_datasets/%s/%sB/*' % (self.dataset_name, data_type)) self.n_batches = int(min(len(path_A), len(path_B)) / batch_size) total_samples = self.n_batches * batch_size path_A = np.random.choice(path_A, total_samples, replace=False) path_B = np.random.choice(path_B, total_samples, replace=False) for i in range(self.n_batches-1): batch_A = path_A[i*batch_size:(i+1)*batch_size] batch_B = path_B[i*batch_size:(i+1)*batch_size] imgs_A, imgs_B = [], [] for img_A, img_B in zip(batch_A, batch_B): img_A = self.imread(img_A) img_B = self.imread(img_B) # ーーー問題の箇所がこちらです↓ーーー img_A = np.array(Image.fromarray((img_A * 255).astype(np.uint8)).resize(self.img_res, img_A)) img_B = np.array(Image.fromarray(img_B.astype(np.uint8)).resize(self.img_res, img_B)) # ーーー問題の箇所がこちらです↑ーーー
<コード作成の経緯とこれまで対処してきたこと>
①初め、問題の箇所については以下のコードで書いていました。
しかし、scipy.misc.imresize自体がver1.3.0以降使えなくなったと分かり、対処法として
numpy.array(Image.fromarray(arr).resize())を使うことにしました。
※上記対処法についてはこちらで確認しました。
img_A = scipy.misc.imresize(img_A, self.img_res) img_B = scipy.misc.imresize(img_B, self.img_res)
②次に、コードを以下の通りに書き直すも、今度は次のエラーが出ました。
TypeError: Cannot handle this data type: (1, 1, 3), <f8
この件に関しては、他の方のteratailでの質問・回答より、呼び込む画像データの型に問題があると分かりました。
※こちらで理由を確認しました。
img_A = np.array(Image.fromarray(img_A).resize(self.img_res, img_A)) img_B = np.array(Image.fromarray(img_B).resize(self.img_res, img_B))
③最後に、②を踏まえてデータの型を変えるために以下のコードにするも、本質問で出したようにエラーが出てしまいました。
※コード変更はこちらを参考にしました。
img_A = np.array(Image.fromarray((img_A * 255).astype(np.uint8)).resize(self.img_res, img_A))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
img_A = np.array(Image.fromarray((img_A * 255).astype(np.uint8)).resize(self.img_res, img_A)) img_B = np.array(Image.fromarray((img_A * 255).astype(np.uint8)).resize(self.img_res, img_B))
お手数をおかけしますが、どうかよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 13:54