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

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

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

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

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

Q&A

解決済

1回答

851閲覧

python x=listのとき sum(x)==(y+=z for z in x)になりません

Flan.

総合スコア123

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

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

0グッド

0クリップ

投稿2020/07/05 15:36

self.aaaaaaaaaaaaaaaaaaはデバック用に置いた変数です
ですがこの値が矛盾してます 理由が全く分かりません

import numpy as np x=np.random.rand(100)#乱数生成 y=0 for _ in range(100): y+=x[_] print(sum(x)) print(y) の場合で y==xにならない 下のコードではということになってます

self.aaaaaaaaaaaaaaaaaaはlistでlossの中身を見るためにつけました
問題のコード説明
強化学習をやっていて
self.tortal_lossesはdoneが来るまでのlossの合計
lossを1stepずつ足していき done信号(定期的に来る)がきたら0にする 
lossは二乗しているので必ず+です
self.aaaaaaaaaaaaaaaaaaの合計は明らかに0.0001を超えているのに
表示されます
エピソード数(doneが何回来たか) Episode finished この問題には関係ない値 loss tensor(self.tortal_losses)
はdone信号が来たら表示します
問題の部分

python

1 2 self.tortal_losses+=loss.detach().to('cpu') 3 4 self.aaaaaaaaaaaaaaaaaa.append(loss.detach()) 5 if self.tortal_losses<0.0001: 6 print(self.aaaaaaaaaaaaaaaaaa) 7リセット部分 8 def Done(self,step): 9 self.beta = self.beta_initial + (1 - self.beta_initial) * step / self.beta_steps 10 self.Rs=[0 for _ in range(multireward_steps)] 11 self.tortal_losses=0 12 self.aaaaaaaaaaaaaaaaaa=[]#-----------------------------
13 Episode finished -1158.8909563610828 loss tensor(0.0026) [tensor(1.0641e-05, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0'), tensor(8.9044e-06, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0'), tensor(8.9044e-06, device='cuda:0'), tensor(8.3876e-06, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0'), tensor(8.9044e-06, device='cuda:0'), tensor(8.3876e-06, device='cuda:0'), tensor(1.9963e-05, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0'), tensor(8.9044e-06, device='cuda:0'), tensor(8.3876e-06, device='cuda:0'), tensor(1.9963e-05, device='cuda:0'), tensor(7.8826e-06, device='cuda:0')] [tensor(1.0641e-05, device='cuda:0'), tensor(6.0145e-06, device='cuda:0'), tensor(1.8771e-05, device='cuda:0'), tensor(1.0291e-05, device='cuda:0'), tensor(8.9044e-06, device='cuda:0'), tensor(8.3876e-06, device='cuda:0'), tensor(1.9963e-05, device='cuda:0'), tensor(7.8826e-06, device='cuda:0'), tensor(9.0109e-06, device='cuda:0')] 14 Episode finished -1128.1795158087486 loss tensor(0.0038) [tensor(2.9019e-05, device='cuda:0')] [tensor(2.9019e-05, device='cuda:0'), tensor(2.4793e-05, device='cuda:0')] [tensor(2.9019e-05, device='cuda:0'), tensor(2.4793e-05, device='cuda:0'), tensor(1.5492e-05, device='cuda:0')] [tensor(2.9019e-05, device='cuda:0'), tensor(2.4793e-05, device='cuda:0'), tensor(1.5492e-05, device='cuda:0'), tensor(1.5380e-05, device='cuda:0')] [tensor(2.9019e-05, device='cuda:0'), tensor(2.4793e-05, device='cuda:0'), tensor(1.5492e-05, device='cuda:0'), tensor(1.5380e-05, device='cuda:0'), tensor(1.0752e-05, device='cuda:0')] 15 Episode finished -1135.8225297289405 loss tensor(0.0252) 16 Episode finished -1153.358029432231 loss tensor(0.0104) [tensor(1.7044e-05, device='cuda:0')] [tensor(1.7044e-05, device='cuda:0'), tensor(1.5978e-05, device='cuda:0')] [tensor(1.7044e-05, device='cuda:0'), tensor(1.5978e-05, device='cuda:0'), tensor(2.3430e-05, device='cuda:0')]

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

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

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

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

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

can110

2020/07/05 22:41

すみませんが全体的に質問を理解することができません。 ・単体で実行でき問題を再現できる最小のコードを提示する ・そのコードを実行した現状の結果、その結果の問題点、得たい結果を具体的に示す と回答得られやすくなると思います。
quickquip

2020/07/05 23:46

self.tortal_losses をprintしていますか?
guest

回答1

0

ベストアンサー

pythonというよりもpytorchの問題です。

self.aaaaaaaaaaaaaaaaaa.append(loss.detach())

に問題があります。loss.detach()の結果はその後の演算の影響を受けます。

python

1import torch 2 3losses = [] 4 5loss = torch.ones(1) * 100.0 6losses.append(loss.detach()) 7 8loss -= 10.0 9losses.append(loss.detach()) 10 11print(losses) 12 13# 結果 14# [tensor([90.]), tensor([90.])]

loss.clone()を使えば意図した動作になると思います。

投稿2020/07/06 00:02

編集2020/07/06 00:05
yymmt

総合スコア1615

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問