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

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

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

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

Python

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

Q&A

解決済

1回答

618閲覧

tensorflow,Deep Q Networkに関するエラー

yoshiya

総合スコア20

Keras

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

Python

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

0グッド

0クリップ

投稿2022/06/22 08:50

編集2022/06/24 01:55

読み込むExcelデータを変えただけでInconsistent dtypes or shapes between inputs and input_tensor_specというエラーが出る

2020年にも別の掲示板で似たような質問をしている人がいましたがtf-agentsAtariのアップデートを待てとのことでした...
内部で生成するQネットワークにエラーがある?
一部名前を修正しているのでミスがあったらすみません.

ライブラリのバージョン
tensorflow 2.9.1 tf-agents 0.13.0
プログラム(一部抜粋)

python

1#EnvironmentSimulatorの一部 2class EnvironmentSimulator(py_environment.PyEnvironment): 3 def __init__(self,GET_DATA,mix_alpha): 4 self.GET_DATA=GET_DATA 5 self.mix_alpha=mix_alpha 6 7 8 self._observation_spec = array_spec.BoundedArraySpec( 9 shape=(self.GET_DATA,6), dtype=np.float32 10 ) 11 self._action_spec = array_spec.BoundedArraySpec( 12 shape=(), dtype=np.int32, minimum=0, maximum=2 13 14 ) 15 self._reset() 16 def observation_spec(self): 17 return self._observation_spec 18 def action_spec(self): 19 return self._action_spec 20 21 def _reset(self): 22 self._state= np.zeros((self.GET_DATA,6), dtype=np.float32) 23 self._TABLE_INX=500 24 return ts.restart(np.array(self._state, dtype=np.float32)) 25 26 def _step(self, action): 27 df_mix=self.df_mix[self._TABLE_INX:self._TABLE_INX+self.GET_DATA] 28 self._state=tf.constant(df_mix) 29 30 self._TABLE_INX=self._TABLE_INX+1 31 32 33 reward = 0 34 if action==0: 35 36 (step処理省略) 37 38 return ts.transition(np.array(self._state,dtype=np.float32), reward=reward) 39

上記のステップ関数内でget_data行×6列のデータ取得しself._stateに更新しています.

ネットワーク構成

python

1#ネットワーク構築 2class MyQNetwork(network.Network): 3 def __init__(self, observation_spec, action_spec, n_hidden_channels=100,name='QNetwork'): 4 super(MyQNetwork, self).__init__( 5 input_tensor_spec=observation_spec, 6 state_spec=(), 7 name=name 8 ) 9 n_action = action_spec.maximum - action_spec.minimum + 1 10 set_dropout=0.2 11 self.model = keras.Sequential( 12 [ 13 keras.layers.InputLayer(input_shape=(100,6)), 14 keras.layers.LSTM(units=n_hidden_channels,dropout=set_dropout,return_sequences=True), 15(16

メイン関数の一部

python

1#メイン関数の一部 2 GET_DATA=100 3 mix_data=pd.read_excel('mix_data.xlsx',index_col=0) 4 5 env_py = EnvironmentSimulator(GET_DATA,mix_data) 6 env = tf_py_environment.TFPyEnvironment(env_py) 7 primary_network = MyQNetwork(env.observation_spec(), env.action_spec()) 8#エージェントの設定 9 n_step_update = 1 10 agent = dqn_agent.DqnAgent( 11 env.time_step_spec(), 12 env.action_spec(), 13 q_network=primary_network, 14 optimizer=keras.optimizers.Adam(learning_rate=1e-3, epsilon=1e-5), 15 n_step_update=n_step_update, 16 epsilon_greedy=1.0, 17 target_update_tau=1.0, 18 target_update_period=10, 19 gamma=0.9, 20 td_errors_loss_fn = common.element_wise_squared_loss, 21 train_step_counter = tf.Variable(0) 22 ) 23 agent.initialize() 24 agent.train = common.function(agent.train) 25 26 policy = agent.collect_policy 27 28 replay_buffer = tf_uniform_replay_buffer.TFUniformReplayBuffer( 29 data_spec=agent.collect_data_spec, 30 batch_size=env.batch_size, 31 max_length=10**6 32 ) 33 dataset = replay_buffer.as_dataset( 34 num_parallel_calls=tf.data.experimental.AUTOTUNE, 35 sample_batch_size=32, 36 num_steps=n_step_update+1 37 ).prefetch(tf.data.experimental.AUTOTUNE) 38 iterator = iter(dataset) 39 40 env.reset() 41 driver = dynamic_step_driver.DynamicStepDriver( 42 env, 43 policy, 44 observers=[replay_buffer.add_batch], 45 num_steps = 500, 46 ) 47 driver.run(maximum_iterations=1000) 48 49 num_episodes = 200 50 epsilon = np.linspace(start=1.0, stop=0.0, num=num_episodes+1) 51 tf_policy_saver = policy_saver.PolicySaver(policy=agent.policy) 52 53 54 for episode in range(num_episodes+1): 55(以下略

これを実行すると以下のエラーがでました

エラー内容
driver.run(maximum_iterations=1000) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\drivers\dynamic_step_driver.py", line 182, in run return self._run_fn( File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\utils\common.py", line 188, in with_check_resource_vars return fn(*fn_args, **fn_kwargs) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\drivers\dynamic_step_driver.py", line 202, in _run tf.while_loop( File "D:\Programs Files\Python\Python39\lib\site-packages\tensorflow\python\util\deprecation.py", line 629, in new_func return func(*args, **kwargs) File "D:\Programs Files\Python\Python39\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2507, in while_loop_v2 return while_loop( File "D:\Programs Files\Python\Python39\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2754, in while_loop loop_vars = body(*loop_vars) File "D:\Programs Files\Python\Python39\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2745, in <lambda> body = lambda i, lv: (i + 1, orig_body(*lv)) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\drivers\dynamic_step_driver.py", line 135, in loop_body action_step = self.policy.action(time_step, policy_state) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\tf_policy.py", line 324, in action step = action_fn(time_step=time_step, policy_state=policy_state, seed=seed) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\utils\common.py", line 188, in with_check_resource_vars return fn(*fn_args, **fn_kwargs) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\epsilon_greedy_policy.py", line 115, in _action greedy_action = self._greedy_policy.action(time_step, policy_state) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\tf_policy.py", line 324, in action step = action_fn(time_step=time_step, policy_state=policy_state, seed=seed) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\utils\common.py", line 188, in with_check_resource_vars return fn(*fn_args, **fn_kwargs) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\tf_policy.py", line 560, in _action distribution_step = self._distribution(time_step, policy_state) # pytype: disable=wrong-arg-types File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\greedy_policy.py", line 80, in _distribution distribution_step = self._wrapped_policy.distribution( File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\tf_policy.py", line 403, in distribution step = self._distribution(time_step=time_step, policy_state=policy_state) File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\policies\q_policy.py", line 156, in _distribution q_values, policy_state = self._q_network( File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\networks\network.py", line 391, in __call__ nest_utils.assert_matching_dtypes_and_inner_shapes( File "D:\Programs Files\Python\Python39\lib\site-packages\tf_agents\utils\nest_utils.py", line 407, in assert_matching_dtypes_and_inner_shapes raise ValueError('{}: Inconsistent dtypes or shapes between {} and {}.\n' ValueError: <__main__.MyQNetwork object at 0x000001833D352550>: Inconsistent dtypes or shapes between `inputs` and `input_tensor_spec`. dtypes: <dtype: 'float32'> vs. <dtype: 'float32'>. shapes: (1, 99, 6) vs. (100, 6).

(100, 6)のデータを取り込んでも勝手に内部で(1,99,6)の形に変換されてる????

ちなみにネットワークや_observation_specの部分を(1, 99, 6)になるように変えても次は
(None,1, 99, 6)
vs.
(1, 99, 6)
と出てきます.
データの内容が違いますが同じデータ数のファイルを使ってもこのエラーが出ないものがあります.
エラーがでないときはきちんと学習できていましたが最近作成するExcelファイルにはすべてこのエラーを突き返されます.
excelは1000~ 10000行×6列のデータです.csvで保存して読み込んでも同じエラーが出ました.
またExcel内の小数点における処理によってエラーが発生しているかと思って,全部整数になるように数値変換してint型で読み込んでも同じエラーがでました.
エラーが出るものと出ないファイルのdataflameの型やサイズを調べても同じでした

具体的な解決策がわかりません.どうかよろしくお願いします.

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

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

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

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

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

guest

回答1

0

自己解決

最初にdriveで設定したnum_step数だけstepの動作が行われるがその際

python

1df_mix=self.df_mix[self._TABLE_INX:self._TABLE_INX+self.GET_DATA] 2self._state=tf.constant(df_mix) 3self._TABLE_INX=self._TABLE_INX+1

も同じ数だけ動作する.そこの認識が間違っていたため実際より多く動作してしまいデータの行数より_TABLE_INXが多くなり._stateの更新がうまくいかずエラーが起きた.

投稿2022/06/23 11:20

yoshiya

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問