0

Pythonスクリプトを試しているときに得たエラーコードをダンプします:

事前に検証データを前処理する

GPU デバイス 0 の使用: Tesla K20c

Traceback (most recent call last):

File "<string>", line 1, in <module>

File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 380, in main prepare(preparation_data)

File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 495, in prepare '__parents_main__', file, path_name, etc

File "C:\Users\Administrator\Desktop\Galaxy Data\kaggle-galaxies-master\kaggle-galaxies-master\try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py", line 133, in <module>

for data, length in create_valid_gen():

File "load_data.py", line 572, in buffered_gen_mp process.start()

`File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\process.py"、130行目、start self._popen = Popen(self)

ファイル "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py"、258 行目、init cmd = get_command_line() + [rhandle]

ファイル "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py"、358 行目、get_command_line`

is not going to be frozen to produce a Windows executable.''')

RuntimeError: 現在のプロセスがブートストラップ フェーズを完了する前に、新しいプロセスを開始しようとしています。

        This probably means that you are on Windows and you have
        forgotten to use the proper idiom in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce a Windows executable.

私が理解しているように、行を挿入する必要があります

if __name__ == '__main__':

それを機能させる場所

どのファイルに挿入すればよいか教えてもらえますか? 影響を受けるファイルのリストを初期エラー ログに含めました

影響を受けるファイル:

https://github.com/benanne/kaggle-galaxies/blob/master/try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py

131~134行目

https://github.com/benanne/kaggle-galaxies/blob/master/load_data.py

572行目

4

1 に答える 1

0

この場合、 Python のドキュメントは非常に明確です。
重要な部分はSafe importing of main module.

あなたのtry_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.pyスクリプトは、モジュール レベルで多くのことを行っています。詳細を読まなくても、ワークフローを関数でラップして、次のように使用する必要があると言えます。

if __name__ == '__main__':
    freeze_support() # Optional under circumstances described in docs
    your_workflow_function()

あなたが抱えている問題に加えて、ユーザーがスクリプトをインポートしてその機能の一部を再利用したいだけの場合は、スクリプトの潜在的なユーザーを副作用で驚かせないことをお勧めします。
したがって、コードをモジュール レベルに配置しないでください。モジュール レベルで定数を使用することは問題ありませんが、ワークフローは関数とクラスにする必要があります。
Pythonモジュールがスクリプトとして使用されることを意図している場合(あなたの場合のように)、モジュールがインタープリターのエントリポイントである場合にのみif __name__ == '__main__'呼び出して、このモジュールの最後に置くyour_workflow_function()だけです-いわゆるmain module.

于 2015-03-03T14:57:54.857 に答える