前提・実現したいこと
現在、tensorflow版cycleganで声質変換を行うAIを作成しているのですが、データの入力で以下のエラーが出て詰まっています。入力データは二次元のnumpy配列です。
発生している問題・エラーメッセージ
File "C:\Users\mounf\PycharmProjects\kujiko_kagakubu\model.py", line 152, in <listcomp> batch_images = [load_train_data(int(float(np.ravel((np.array(list(batch_file)))))), args.load_size, args.fine_size) for batch_file in batch_files] TypeError: only size-1 arrays can be converted to Python scalars
該当のソースコード(データの読み込み)
python
1 2 3def load_train_data(image_path, load_size=286, fine_size=256, is_testing=False): 4 with open(image_path[0], 'rb') as im: 5 fft_array = pickle.load(im) 6 img_A = np.abs(fft_array[:, :128], dtype=np.float32) 7 np.clip(img_A, 1000, None, out=img_A) 8 np.log(img_A, out=img_A) 9 if np.max(img_A) > 0.95: 10 print('input image max bigger than 0.95', np.max(img_A)) 11 if np.min(img_A) < 0.05: 12 print('input image min smaller than 0.05', np.min(img_A)) 13 with open(image_path[1], 'rb') as im: 14 fft_array = pickle.load(im) 15 img_B = np.abs(fft_array[:, :128], dtype=np.float32) 16 np.clip(img_B, 1000, None, out=img_B) 17 np.log(img_B, out=img_B) 18 if np.max(img_B) > 0.95: 19 print('input image max bigger than 0.95', np.max(img_B)) 20 if np.min(img_B) < 0.05: 21 print('input image min smaller than 0.05', np.min(img_B)) 22 if not is_testing: 23 if np.random.random() > 0.5: 24 img_A = np.fliplr(img_A) 25 img_B = np.fliplr(img_B) 26 27 img_AB = np.concatenate(img_A,img_B) 28 img_AB=np.array(img_AB) 29 print(img_AB.ndim) 30 # img_AB shape: (fine_size, fine_size, input_c_dim + output_c_dim) 31 return np.flatten(img_AB) 32 33 34
該当のソースコード(データ入力)
python
1 for epoch in range(args.epoch): 2 dataA = glob('./datasets/{}/*.*'.format(self.dataset_dir + '/trainA')) 3 dataB = glob('./datasets/{}/*.*'.format(self.dataset_dir + '/trainB')) 4 np.random.shuffle(dataA) 5 np.random.shuffle(dataB) 6 batch_idxs = min(min(len(dataA), len(dataB)), args.train_size) // self.batch_size 7 lr = args.lr if epoch < args.epoch_step else args.lr*(args.epoch-epoch)/(args.epoch-args.epoch_step) 8 9 for idx in range(0, batch_idxs): 10 batch_files = list(zip(dataA[idx * self.batch_size:(idx + 1) * self.batch_size], 11 dataB[idx * self.batch_size:(idx + 1) * self.batch_size])) 12 batch_images = [load_train_data(int(float(np.ravel((np.array(list(batch_file)))))), args.load_size, args.fine_size) for batch_file in batch_files] 13 batch_images = np.array(batch_images).astype(np.float32) 14
試したこと
def load_train_data内で、img_AB=np.flatten()など行ったのですが何も効果がありませんでした。
補足情報(FW/ツールのバージョンなど)
numpy 1.17.3
tensorflow-gpu 1.8.0
ここにより詳細な情報を記載してください。