Closed sim-mokomo closed 6 years ago
私もまったく同じエラーで悩まされています。 ただ、私の場合は Actual: 6!= 7 になってます
ちょっと原因が想像つかないですね・・・お役に立てず申し訳ないです。
もしかしたら、chainerのバージョンが上がって、仕様が変わったのかもしれません。 私が実験していた際はchainerのv3.5.0を用いていました。
issueは一度閉じますが、進展等あればまた報告いただけると幸いです。
@Hiroshiba
環境 python=3.6.6 chainner=3.5.0 cupy=2.5.0
解決はしていませんが進展を報告します。
提供してくださったサンプルを用いての学習はエラーも出ずにうまく実行されることを確認いたしました。 しかし自分で用意した音源を元に学習を行った場合にエラーが出てしまいます。
このことから音源のフォーマットの問題かと思い、提供サンプルとの違いを調査しました。 サンプル音源との違いは以下の項目についてでしたので修正したのちに特徴量を抽出、学習を 回しましたところ同様のエラーがでました。ただし Actual: 2 != 3 となりました。
channels=2 => channels=1 sample_rate=44100 => sample_rate=22050
pythonのバージョンを推奨のバージョンに切り替えて再度試してみます。
@Hiroshiba
Pythonを推奨バージョン3.6.3に切り替えて実行してみましたがうまくいきませんでした。
サンプリングレートを変えているのであればそれが問題だと思います。 sample_rate=24000で一度試すとうまくいくかもしれません。
というのも、サンプリングレートでここの値が変わるためです。 https://github.com/Hiroshiba/become-yukarin/blob/7fe29af7a15dddcf8220733472cb985019aa1e87/scripts/extract_spectrogram_pair.py#L62
もしくは、サンプリングレートを変えた状態でfftlen
を1024にしても学習は動くと思います。
ですが、他の部分にも修正を加える必要が出てくると思います。
古い issueですが、一応の回避作があるので、書かせていただきます。
私もこのエラーを度々目にします。 npyデータ作り直していたりすると、勝手にエラーが消えたりして、 いまいち再現性がわかりません。
ただ、回避方法だけはわかっており config_sr.json の log_iteration の値をすごく大きな値にして、log生成をしないようにします。 "log_iteration": 100000000000,
該当エラーは、学習過程のデータを出力する log ファイルを処理する際のに発生します。 この設定で log ファイルは出力されなくなりますが、学習を回すことはできると思います。
以上、参考になれば幸いです。
同じエラーで悩まされたので調べたのですが、LastPaddingProcess(data[time_axis] が config.train_crop_size 未満だったらパディングする処理?)の周辺を以下のように変えたら、エラーは起きなくなりました。 内容は理解せずに「time_axis が音源の長さに依存する軸のことなら、こんな感じかな?」と雰囲気でやってますので、適宜書き換えていただければと思います。短い音源を使った場合だけ発生するエラーなのかもしれません。
diff --git a/become_yukarin/dataset/dataset.py b/become_yukarin/dataset/dataset.py
index fd7bab2..a0798b4 100644
--- a/become_yukarin/dataset/dataset.py
+++ b/become_yukarin/dataset/dataset.py
@@ -365,7 +365,6 @@ class RandomPaddingProcess(BaseDataProcess):
class LastPaddingProcess(BaseDataProcess):
def __init__(self, min_size: int, time_axis: int = 1) -> None:
- assert time_axis == 1
self._min_size = min_size
self._time_axis = time_axis
@@ -374,7 +373,10 @@ class LastPaddingProcess(BaseDataProcess):
return data
pre = self._min_size - data.shape[self._time_axis]
- return numpy.pad(data, ((0, 0), (pre, 0)), mode='constant')
+ if self._time_axis == 1:
+ return numpy.pad(data, ((0, 0), (pre, 0)), mode='constant')
+ else:
+ return numpy.pad(data, ((pre, 0), (0, 0)), mode='constant')
class RandomCropProcess(BaseDataProcess):
@@ -629,12 +631,12 @@ def create_sr(config: SRDatasetConfig):
data_process_test.append(SplitProcess(dict(
input=ChainProcess([
LambdaProcess(lambda d, test: d['input']),
- LastPaddingProcess(min_size=config.train_crop_size),
+ LastPaddingProcess(min_size=config.train_crop_size, time_axis=0),
FirstCropProcess(crop_size=config.train_crop_size, time_axis=0),
]),
target=ChainProcess([
LambdaProcess(lambda d, test: d['target']),
- LastPaddingProcess(min_size=config.train_crop_size),
+ LastPaddingProcess(min_size=config.train_crop_size, time_axis=0),
FirstCropProcess(crop_size=config.train_crop_size, time_axis=0),
]),
)))
sr_train.pyを実行し、学習を始めたところ、SRDecoderクラス内callでtype_check時に以下のようなエラーが出てしまいます。
自分で調べましたところ次元数が一致していない時に出るようです。 Deconvolution2Dなどshapeを操作している場所を調べてみたのですが理解度が低いため解決方法がわかりませんでした。 修正のアプローチを教えて欲しいです。
こちらがエラー時のTracebackとなります