szksjm
@szksjm

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

keras モデル可視化のエラーについて

kerasモデル可視化(画像化)について

自分の作成したニューラルネットワークを可視化したいと思い,
以下のようなコードを追加したところ,エラーが出ました.

発生している問題・エラー


  File "C:\Users\XXX\anaconda3\lib\site-packages\pydot\__init__.py", line 2013, in create
    stderr_output = ''.join(stderr_output)

TypeError: sequence item 0: expected str instance, bytes found

line2013~2022部分

        if not stderr.closed:
            stderr_output = list()
            while True:
                data = stderr.read().decode('utf-8')
                if not data:
                    break
                stderr_output.append(data)
            stderr.close()

            if stderr_output:
                stderr_output = ''.join(stderr_output)

        #pid, status = os.waitpid(p.pid, 0)
        status = p.wait()

        if status != 0 :
            raise InvocationException(
                'Program terminated with status: %d. stderr follows: %s' % (
                    status, stderr_output) )
        elif stderr_output:
            print(stderr_output)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

例)

### 該当するソースコード
# インポートするもの
from keras.utils import plot_model # モデル可視化用

# モデル構築後に以下のコードを記述
  model = Sequential()
  model.add(Dense(18,activation='tanh', input_shape=(size,),kernel_initializer='random_uniform'))
  model.add(Dense(8, activation='tanh',kernel_initializer='random_uniform'))
  model.add(Dropout(0.1))
  model.add(Dense(2, activation='tanh',kernel_initializer='random_uniform')) 
  model.summary()
  b_size=10 
  epoch=300
plot_model(model, # 構築したモデルを指定
    show_shapes=True, # グラフ中に出力のshapeを表示するかどうか
    show_layer_names=True, # グラフ中にレイヤー名を表示するかどうか
    to_file='model.png')

追記

from keras.utils import plot_model # モデル可視化用
plot_model(model, # 構築したモデルを指定
    show_shapes=True, # グラフ中に出力のshapeを表示するかどうか
    show_layer_names=True, # グラフ中にレイヤー名を表示するかどうか
    to_file='model.png')

この二つはネット上のものを拝借して実行しました.
また,上記のコードは一部であり,ネット上でのコードに自分のニューラルネットワークのモデルを追加したものであり,追加しなければ正常に動きます.

0

1Answer

stderr.read() で読み込んだデータは str 型ではなく bytes 型なのでそのままでは join できません。

data = stderr.read().decode('utf-8')

として str 型に変換してください。

0Like

Comments

  1. @szksjm

    Questioner

    回答ありがとうございます。
    ご指摘の通り変更して実行したところ,以下のエラーが出ました.
    まだ変更すべきところがあるのでしょうか.

    File "C:\Users\XXXX\anaconda3\lib\site-packages\pydot\__init__.py", line 2021, in create
    status, stderr_output) )

    InvocationException: Program terminated with status: 1. stderr follows: Format: "ps" not recognized. Use one of:


    該当部,追記します.
  2. 2013行目より前で変数 p に Popen オブジェクトを代入しているかと思いますが、そこで実行している外部プログラムから 「Format: "ps" not recognized. Use one of:」とエラーメッセージが出ています。このメッセージでググると graphviz のようですね。指定された出力ファイル形式 ps (PostScript)をサポートしていないようです。普通サポートしているはずですが。

    https://stackoverflow.com/questions/35688320/graphviz-seems-doesnt-support-png-and-map
    この QA によればプロンプトで dot -c コマンドを実行すると直るようです。 dot -v コマンドで対応形式を表示した中に ps が含まれていれば正常です。

Your answer might help someone💌