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

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

新規登録して質問してみよう
ただいま回答率
85.37%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Q&A

0回答

1288閲覧

pytorch ニューラルネットワークの出力がとても大きな数字になります こういうものですか?

Flan.

総合スコア123

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

0グッド

0クリップ

投稿2020/05/31 05:39

編集2020/06/01 07:36

ランダムな数字をいれて動かしてみると
初期化しただけで学習はさせてませんが
出力の値がとても大きいです こういう物ですか?

出力の値 [[-579.5 358.2]]たまに2000とかになる

試したこと
全結合を作り直したり wの分布を変えた

活性化関数 class swish(nn.Module): def __init__(self, beta = 1.25): super().__init__() self.beta = beta def forward(self, inputs): return inputs * torch.sigmoid(self.beta * inputs) class mish(nn.Module): def __init__(self): super().__init__() def forward(self, inputs): return inputs * torch.tanh(F.softplus(input)) 全結合 class Dense(nn.Module): def __init__(self, input_dim, output_dim, activation=lambda x: x,loc= 0,scale = 0.6,): ''' 引数: input_dim: 入力次元 output_dim: 出力次元 activation: 活性化関数 パラメータ: W: 重み b: バイアス ''' super().__init__() self.weight = \ nn.Parameter(torch.Tensor( np.random.normal(loc=loc,scale=scale,size=(input_dim,output_dim)))) self.bias = \ nn.Parameter(torch.Tensor( np.zeros(output_dim))) self.activation = activation def forward(self, x): print(self.weight[0]) return self.activation(torch.matmul(x, self.weight) + self.bias) 初期化 def init_weights(m): if type(m)==nn.Linear or type(m)==nn.Conv2d or type(m)==Dense: nn.init.kaiming_normal_(m.weight, a=0, mode='fan_in') m.bias.data.fill_(0) from torch.autograd import Variable モデル class QNetwork(nn.Module): def __init__(self, num_inputs, num_outputs,device): super(QNetwork, self).__init__() self.hidden_size=25*25 self.hidden_CNN=256*25*25 self.hidden_size1=25*25 self.hidden_size2=None self.device=device self.cnn1 = nn.Sequential( nn.Conv2d(3, 16, kernel_size=(3,3), padding=1), nn.Conv2d(16, 16, kernel_size=(3,3), padding=1), nn.MaxPool2d(kernel_size=(2,2), stride=(2,2)),        CNN nn.Conv2d(256, 256, kernel_size=(3,3), padding=1), nn.MaxPool2d(kernel_size=(2,2), stride=(2,2))) self.cnn1.apply(init_weights) self.net= nn.Sequential( Dense(self.hidden_CNN, self.hidden_size1,activation=swish(0.9)), Dense(self.hidden_size1, self.hidden_size1,activation=swish()), Dense(self.hidden_size1, self.hidden_size1,activation=swish()) ) self.net.apply(init_weights) self.a = Dense(self.hidden_size, self.hidden_size,activation=swish(0.7)) init_weights(self.a) self.V_q = Dense(self.hidden_size, 1)# V_q self.V = Dense(self.hidden_size, 1)# V self.mu = Dense(self.hidden_size, num_outputs)# mu init_weights(self.V) init_weights(self.V_q) init_weights(self.mu) def forward(self,inputs,net): if net=="net_q": x, u = torch.from_numpy(inputs).to(self.device) x=x.permute(0 ,3, 1, 2) else: x = torch.from_numpy(inputs).to(self.device) x=x.permute(0 ,3, 1, 2) #------------------------------------ x=self.cnn1(x) x=x.contiguous().view(-1, 1).T x=self.free_net(x) #---------------------------------- x=self.a(x) if net=="net_v": V=self.V(x)+-self.V_q(x) return V.to('cpu').detach().numpy().copy() if net=="net_a": mu =self.mu(x) return mu.to('cpu').detach().numpy().copy() モデルの設定 device = 'cuda' if torch.cuda.is_available() else 'cpu' print(device) mainQN = QNetwork((3,400,400),2,device).to(device) optimizer = optim.Adam(mainQN.parameters(), lr=0.001) mainQN, optimizer = amp.initialize(mainQN, optimizer, opt_level="O1")#-------------- criterion = nn.MSELoss() mainQN.eval() #mainQN.sample_noise print(mainQN.forward(np.random.rand(1,400,400,3),"net_v")) print(mainQN.forward(np.random.rand(1,400,400,3),"net_a"))

weight をprintした結果(forward時にprintしてるからheで初期化済みなはず)

[-7.5829e-02, -3.2249e-02, 6.5457e-02, -1.6125e-02, 2.3056e-02, -3.0077e-02, -1.4512e-02, -9.7091e-02, 2.3019e-02, -3.0182e-02, 2.1734e-03, 8.7193e-02, 2.5717e-02, 8.9440e-03, -7.8190e-02, -6.4081e-04, 1.4192e-02, -8.9038e-03, -4.0937e-02, 5.2399e-03, -1.5022e-01, -8.0301e-02, 7.1431e-02, 4.3368e-02, -4.0728e-02, 1.0702e-02, 7.7349e-03, 2.6308e-02, 7.5558e-02, -5.1390e-02, -3.5322e-02, -5.4469e-02, -4.3117e-02, 7.9836e-02, 1.1570e-01,

これは正常に作動しているのでしょうか?
わかる人教えてください

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問