質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Keras-RL

Keras-RLは、Kerasを用いてDQNなどの深層強化学習アルゴリズムを実装したライブラリです。学習する強化学習の環境をOpenAI Gymのインターフェースに準じて作成することが必要です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1660閲覧

Keras使用時のTypeError

Luke02561

総合スコア404

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Keras-RL

Keras-RLは、Kerasを用いてDQNなどの深層強化学習アルゴリズムを実装したライブラリです。学習する強化学習の環境をOpenAI Gymのインターフェースに準じて作成することが必要です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/14 09:54

編集2020/08/18 12:45

# 起きているエラー

Traceback (most recent call last): File "train.py", line 44, in <module> dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=100, target_model_update=1e-2, policy=policy) File "/usr/local/lib/python3.8/dist-packages/rl/agents/dqn.py", line 108, in __init__ if hasattr(model.output, '__len__') and len(model.output) > 1: File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/framework/ops.py", line 851, in __len__ raise TypeError("len is not well defined for symbolic Tensors. ({}) " TypeError: len is not well defined for symbolic Tensors. (dense_2/BiasAdd:0) Please call `x.shape` rather than `len(x)` for shape information.

この問題について調べたところ、このページでTensorFlowが1系であることが原因とされましたが、自分の環境のTensorFlowはもともと2系で、他にどの様な問題があるのかわかりません。

該当のソースコード

以下のコードでなくても、keras-rlのサンプルコードでも全く同じエラーが起きます
エラー箇所にはコメントがあります。

Python3

1from tensorflow.keras.models import Sequential, model_from_json 2from tensorflow.keras.layers import Dense, Activation, Flatten, Conv2D, MaxPooling2D 3from tensorflow.keras.optimizers import Adam 4 5from rl.agents.dqn import DQNAgent 6from rl.policy import EpsGreedyQPolicy 7from rl.memory import SequentialMemory 8 9from MyEnv import WalkingMap 10 11import matplotlib.pyplot as plt 12 13import pygame 14from pygame.locals import * 15import sys 16import numpy as np 17import time 18import datetime 19 20env = WalkingMap(True) 21nb_actions = env.action_space.n 22 23# DQNのネットワーク定義 24RELEARN = False 25if RELEARN: # already finished 100000 step 26 json_string = open('results/test1.json').read() 27 model = model_from_json(json_string) 28 model.load_weights('results/test1.h5f5') 29else: 30 model = Sequential() 31 model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(1,) + env.observation_space.shape)) 32 model.add(MaxPooling2D(pool_size=(2,2))) 33 model.add(Flatten()) 34 model.add(Dense(units=64, activation='relu')) 35 model.add(Dense(units=64, activation='relu')) 36 model.add(Dense(units=nb_actions, activation='linear')) 37print(model.summary()) 38 39 40# experience replay用のmemory 41memory = SequentialMemory(limit=50000, window_length=1) 42# 行動方策はオーソドックスなepsilon-greedy。ほかに、各行動のQ値によって確率を決定するBoltzmannQPolicyが利用可能 43policy = EpsGreedyQPolicy(eps=0.2) 44 45#エラー箇所↓ 46dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=100, target_model_update=1e-2, policy=policy) 47dqn.compile(Adam(lr=1e-3), metrics=['mae']) 48 49history = dqn.fit(env, nb_steps=20000, visualize=True, verbose=1, nb_max_episode_steps=25) 50#学習の様子を描画したいときは、Envに_render()を実装して、visualize=True にします, 51 52num_ave=50 53hist_ave=[] 54hist_stack=0 55for i, v in enumerate(history.history["nb_episode_steps"]): 56 hist_stack += v 57 if i >= num_ave-1: 58 hist_ave.append(hist_stack / num_ave) 59 hist_stack -= history.history["nb_episode_steps"][i - num_ave+1] 60 else: 61 hist_ave.append(hist_stack / (i+1)) 62 63plt.subplot(2,1,1) 64plt.plot(history.history["nb_episode_steps"]) 65plt.plot(hist_ave) 66plt.ylabel("step") 67 68 69hist_ave=[] 70hist_stack=0 71for i, v in enumerate(history.history["episode_reward"]): 72 hist_stack += v 73 if i >= num_ave-1: 74 hist_ave.append(hist_stack / num_ave) 75 hist_stack -= history.history["episode_reward"][i - num_ave+1] 76 else: 77 hist_ave.append(hist_stack / (i+1)) 78plt.subplot(2,1,2) 79plt.plot(history.history["episode_reward"]) 80plt.plot(hist_ave) 81plt.xlabel("episode") 82plt.ylabel("reward") 83 84plt.grid() 85plt.show() 86 87json_string=dqn.model.to_json() 88open('test.json', 'w').write(json_string) 89 90# After training is done, we save the final weights. 91dqn.save_weights('test.h5f5', overwrite=True)

バージョン情報

モジュールバージョン
Python3.8.2
TensorFlow2.3.0
Keras-RL0.4.2
OpenAI Gym0.17.2
Keras(ソースコード中では不使用)2.4.3

kerasのみでの機械学習ではエラーはありませんでした。もしあるとすればkeras-rlかtensorflowだと思うのですが...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Keras-RLを一度アンインストールし、
Keras-RL2をインストールするとこのエラーは解決しました。
しかし、別のエラーが起きました
別のエラー

投稿2020/08/22 03:43

Luke02561

総合スコア404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問