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

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

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

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

Q&A

解決済

2回答

572閲覧

MLPClassifierのhidden_layer_sizesなどの設定時のカンマの意味について

yohehe

総合スコア48

Python 3.x

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

0グッド

0クリップ

投稿2018/06/13 14:51

プログラミング初心者ですが、pythonで機械学習を勉強しております。
プログラム作成時にカンマがどうして必要なのかわからない使われ方をしている部分が多々ありまして、調べてもわからず質問させていただきました。

多層ニューラルネットワーク設定時に
clf=MLPClassifier(hidden_layer_sizes=(100,)max_iter=10000,tol=0.00001,randomstate=1)
と設定していくのですが、
hidden_layer_sizesのリストの(100,)のカンマはなぜ必要なのでしょうか。

損失関数のグラフ化においても
val_loss,=plt.plot(history.history["val_loss"])
loss,=plt.plot(history.history["loss"])
と記載されている書籍があるのですが、
オブジェクト名の後に書かれているval_loss,のカンマはどのような場合に使用するカンマなのでしょうか。

ご教授いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

(100,)について

これはtupleという型にするためのものです。

python

1>>> (1,2,3) 2(1, 2, 3) 3>>> type((1,2,3)) 4<class 'tuple'> 5>>> (100) 6100 7>>> type((100)) 8<class 'int'> 9>>> (100,) 10(100,) 11>>> type((100,)) 12<class 'tuple'>

このような挙動になります。つまりただ単に()で囲んだ場合、1要素だと演算の優先順位を指定するかっことして解釈されてしまうので、カンマを打つ仕様になっている訳です。

val_loss,=について

これはシーケンスアンパックという概念を理解していないとわからないと思います。pythonではiterableな値を右辺に、各要素に該当する変数を左辺にした代入を書くと、自動的にうまく中身を振り分けてくれます。

python

1>>> a,b,c = [1,2,3] 2>>> a 31 4>>> b 52 6>>> c 73

plt.plotの返り値はLine2Dオブジェクトのlistですが、今回は一本しか線を引いていないので、要素数1のリストになります。

matplotlib.pyplot.plot — Matplotlib 2.2.2 documentation

こうするとシーケンスアンパックされず不便なので、カンマを打ってシーケンスアンパックであることを示します。

python

1>>> a = [0] 2>>> a 3[0] 4>>> a, = [0] 5>>> a 60

参考
Python: シーケンスアンパックについて - CUBE SUGAR CONTAINER

投稿2018/06/13 15:03

hayataka2049

総合スコア30933

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

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

yohehe

2018/06/13 15:11

hayataka様、わかりやすい説明ありがとうございます。(100,)のカンマについてやっと理解できました。シーケンスアンパックについてもいただいた参考を読んで便利な機能なので理解してこうと思います。
guest

0

要素数1のタプルを扱っているのです。

Python

1>>> a = 42 2>>> print(a, type(a)) 342 <class 'int'> 4>>> 5>>> a = (42) 6>>> print(a, type(a)) 742 <class 'int'> 8>>> 9>>> a = (42,) 10>>> print(a, type(a)) 11(42,) <class 'tuple'>

Python

1>>> b = (42,) 2>>> print(b, type(b)) 3(42,) <class 'tuple'> 4>>> 5>>> b, = (42,) 6>>> print(b, type(b)) 742 <class 'int'>

投稿2018/06/13 14:57

編集2018/06/13 14:58
LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問