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

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

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

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

Python

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

Q&A

解決済

1回答

1056閲覧

オートエンコーダのエンコーダ層の出力について

ttt.k

総合スコア3

PyTorch

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

Python

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

0グッド

0クリップ

投稿2021/07/18 01:11

ノイズ除去オートエンコーダを実装する

Pytorchでノイズ除去オートエンコーダを実装する
こちらのサイトのコードを参考にしました。
https://debuggercafe.com/autoencoder-neural-network-application-to-image-denoising/

発生している問題・エラーメッセージ

Fashion MNIST を用いているので28×28ピクセル入力が1になっています。 以下のコードにもあるようにエンコーダー層の最初の層ですが、出力が64となっています。何故64になるのかわかりません。

該当のソースコード

pytorch

1 2self.enc1 = nn.Conv2d(1, 64, kernel_size=3, padding=1) 3self.enc2 = nn.Conv2d(64, 32, kernel_size=3, padding=1) 4self.enc3 = nn.Conv2d(32, 16, kernel_size=3, padding=1) 5self.enc4 = nn.Conv2d(16, 8, kernel_size=3, padding=1) 6self.pool = nn.MaxPool2d(2, 2)

試したこと

64以外の数字でもうまくいく。32や16など。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Fashion MNIST を用いているので28×28ピクセル入力が1になっています。

以下のコードにもあるようにエンコーダー層の最初の層ですが、出力が64となっています。

は、
参考

H=W=28
K=1
M=64
の場合です

何故64になるのかわかりません。

「なる」のではありません
この数字は、自動的に決まるものではありません
畳み込みフィルタのサイズ(3x3とか5x5とか)をいくつにするのかや、隠れ層の層数をいくつにするのか等と同様に、ニューラルネットを設計する際に決める数字です

投稿2021/07/18 08:25

jbpb0

総合スコア7653

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

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

ttt.k

2021/07/18 11:43

回答ありがとうございます!
ttt.k

2021/08/01 10:15

次元を減らしていく際に2の乗数になっていますが何故でしょうか?よろしければご回答宜しくお願い致します。 例えば上の例ですと、8次元まで圧縮するのでそこから4層分考えると8→16→32→64となり64が決まるという解釈でしょうか?
jbpb0

2021/08/02 05:03 編集

> 2の乗数になっていますが何故でしょうか? 単なる慣習だと思います > 8→16→32→64となり64が決まる 質問のコードでは 64, 32, 16, 8 と半分ずつにしてますが、そうしないといけないわけではないです https://qiita.com/cvusk/items/019c254db883957b3050 に三つのニューラルネットがありますので、そちらを見てください 「Conv2D(」の次の数値です ・一つ目は、質問のコードと同じで半分ずつ ・二つ目は32, 32で各層同じ ・三つ目は、質問のコードの逆で2倍ずつ
ttt.k

2021/08/03 05:08

回答ありがとうございます。頭を整理して考えてみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問