2017-09-14 20 views
0

Mxnet-js libraryを使用して、Mxnetの訓練されたモデルをブラウザで視覚化しようとしています。私はMxnet-js git readmeファイルに従っています。Mxnet -js-文字列にバイトを書き込む

彼らはpythonスクリプトを提供しました。 ./tool/model2json、モデルをjsonファイルに変換します。 私は私のモデルは、私はエラーを取得していますと、このスクリプトを実行しています:どのように私は、文字列モードで開かれたファイルにバイトを書き込むことができ、ため

TypeError: write() argument must be str, not bytes 

このエラーメイクセンスを取得。ラインで

モデル= base64.b64encode(バイト([3]、 'RB')sys.argvの(オープン。(読み取り)))

それらはバイトでそれを読み取るが、ライン

でれますそれらは

fo.write(モデル)ストリングモードで、ライン内のファイルを開いてい

012:(sys.argvの1、 'W')オープンFOとして有する

文字列にバイトを書き込んでいます。

ここに何か不足していますか?なぜ彼らは書き込みしようとしていますバイトから文字列

#!/usr/bin/env python 
"""Simple util to convert mxnet model to json format.""" 
import sys 
import json 
import base64 

if len(sys.argv) < 4: 
    print('Usage: <output.json> <symbol.json> <model.param> 
           [mean_image.nd] [synset]') 
    exit(0) 

symbol_json = open(sys.argv[2]).read() 
model = base64.b64encode(bytes(open(sys.argv[3], 'rb').read())) 
mean_image = None 
synset = None 

if len(sys.argv) > 4: 
    mean_image = base64.b64encode(bytes(open(sys.argv[4], 
             'rb').read())) 

if len(sys.argv) > 5: 
    synset = [l.strip() for l in open(sys.argv[5]).readlines()] 

with open(sys.argv[1], 'w') as fo: 

    fo.write('{\n\"symbol\":\n') 
    fo.write(symbol_json) 
    if synset: 
     fo.write(',\n\"synset\": ') 
     fo.write(json.dumps(synset)) 
    fo.write(',\n\"parambase64\": \"') 

    fo.write(model) 
    fo.write('\"\n') 
    if mean_image is not None: 
     fo.write(',\n\"meanimgbase64\": \"') 
     fo.write(mean_image) 
     fo.write('\"\n') 
fo.write('}\n') 

答えて

1

TL; DR あなたはのpython3を使用していますか?もしそうなら、Python2を使うとうまくいくはずです!

詳細: コードはモデルのバイナリウェイトファイルを開き、バイナリデータを読み込み、バイトシーケンス(Python組み込みタイプ)を作成し、それをStringに変換します。

ここで、Python 2は暗黙的にBytesをStringに変換しますが、Python 3ではそれを行いません。だから私はあなたがPython 3を使用していると思うし、あなたの変換は間違っています。 model = str(base64.b64encode(bytes(open(sys.argv[3], 'rb').read()))) 注Pythonの3のために、あなたも起動する必要があること:あなたが実際にはPython 3を使用している場合は、明示的な変換を持っているmodel2json.pyの12を試してみて、更新行することができ、あなたのバージョンの実行python --version を確認するには

readme.mdに記載されているコマンドとは異なるコマンドを使用しているローカルWebサーバー:$ python3 -m http.server

このレポがすべて書き込まれているため、Python3を使用することをお勧めします。

関連する問題