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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

Q&A

解決済

1回答

1262閲覧

数字の画像を学習させるプログラムで把握できないエラーが出ます;

Java_Test2019

総合スコア27

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

0グッド

0クリップ

投稿2019/05/28 03:19

編集2019/05/28 04:42

キカガクという学習サイトにある動画に沿って、jupyter notebookのソフトを利用してpython言語で、
手書きの数字が何の数字か認識させるプログラムを書こうとしました。
MNISTという、グーグルネット上にある手書き数字の画像データセットを読み込んで、
学習させて数字を認識させる?というプログラム作成のレクチャーらしいです。
下記のソースコード、動画のとおりに区分けしたものごと、うえから実行していきました。
モデルの定義前まではエラーがなかったのですが、モデルの定義の6行はエラーが出ました。
このエラー内容が、調べてもよくわからないので助言を頂きたいです。

#ライブラリインポート import tensorflow from tensorflow import keras #ノートブック上用描画ライブラリ %matplotlib inline #マッププロット上での数字データの確認用 import matplotlib.pyplot as plt # パラメータの定義 batch_size = 128 num_class = 10 epochs = 20 # MNISTのデータの読み込み (x_train, y_train),(x_test, y_test) = keras.datasets.mnist.load_data() #データの正規化 x_train, x_test = x_train / 255.0, x_test / 255.0 #モデルの定義 model = keras.models.Sequential([ keras.layers.Flatten(), keras.layers.Dense(512, activation="relu"), keras.layers.Dropout(0.2), keras.layers.Dense(10, activation="softmax") ])

コメントアウトは、こちらのコードの解釈として書きました。
最後の6行を実行したらエラーになりました。そのうち、エラーの部分は、
keras.layers.Dense(10, activation="softmax")
この部分です。
エラー内容は、
ValueError: The first layer in a Sequential model must get an input_shape argument
です。 input_shapeの引数を使えというものだと思いますが、なにぶん動画に沿って書いたので、どこのメソッドの引数を使うのかとかはちょっと把握しておりません。

追記
キカガクのサイトのこの動画に対するQ&Aを見てみると同じエラーの質問がありました。
そこに今回記載した、動画通りのコードに対して、そのコードを動画で書いて解説した本人が返答していました。
それによりますと、コードは間違っていないのですがエラーが出る原因は、TensorFlowのバグらしいです。Githubでも多数事例があるらしいです。
TensorFlowのバージョンを変えると治るとの事でしたのでそうしてみようと思うのですが、変える事によって何か不具合がおきる可能性とかあるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

ValueError: The first layer in a Sequential model must get an input_shape argument


値のエラー: Sequencial モデルの最初の層は input_shape 引数を指定しなければなりません。

最初の層を作成するコンストラクタ引数は input_shape で入力の形状を指定する必要があります。
それを指定していないため、エラーとなっています。


Sequencial モデルの使い方は以下の公式ドキュメントを参考にしてください。

Sequentialモデルのガイド - Keras Documentation

MNIST の学習例は以下を参考にしてください。

kerasのmnistのサンプルを読んでみる - Qiita


追記

自分の環境 TensorFlow 2.0.0-alpha0 では以下のコードで動きました。

python

1from tensorflow import keras 2 3batch_size = 128 4num_class = 10 5epochs = 20 6 7(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() 8 9x_train, x_test = x_train / 255.0, x_test / 255.0 10y_train = keras.utils.to_categorical(y_train) 11y_test = keras.utils.to_categorical(y_test) 12 13model = keras.models.Sequential( 14 [ 15 keras.layers.Flatten(), 16 keras.layers.Dense(512, activation="relu"), 17 keras.layers.Dropout(0.2), 18 keras.layers.Dense(10, activation="softmax"), 19 ] 20) 21model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) 22model.fit( 23 x_train, 24 y_train, 25 batch_size=256, 26 epochs=10, 27 validation_data=(x_test, y_test), 28)

input_shape を指定するバージョン

python

1from tensorflow import keras 2 3batch_size = 128 4num_class = 10 5epochs = 20 6 7(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() 8 9x_train, x_test = x_train / 255.0, x_test / 255.0 10x_train = x_train.reshape(len(x_train), -1) 11x_test = x_test.reshape(len(x_test), -1) 12 13y_train = keras.utils.to_categorical(y_train) 14y_test = keras.utils.to_categorical(y_test) 15 16model = keras.models.Sequential( 17 [ 18 keras.layers.Dense(512, activation="relu", input_shape=(784,)), 19 keras.layers.Dropout(0.2), 20 keras.layers.Dense(512, activation="relu"), 21 keras.layers.Dropout(0.2), 22 keras.layers.Dense(num_class, activation="softmax"), 23 ] 24) 25model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) 26model.fit( 27 x_train, 28 y_train, 29 batch_size=batch_size, 30 epochs=epochs, 31 validation_data=(x_test, y_test), 32)

投稿2019/05/28 03:47

編集2019/05/28 05:59
tiitoi

総合スコア21956

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

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

Java_Test2019

2019/05/28 04:41

回答ありがとうございます。すみません、折角記載していただいたURL先など色々調べてもちょっとわからず、キカガクのサイトのこの動画に対するQ&Aを見てみると同じエラーの質問がありました。 そこに今回記載した、動画通りのコードに対して、そのコードを動画で書いて解説した本人が返答していました。 それによりますと、コードは間違っていないのですがエラーが出る原因は、TensorFlowのバグらしいです。Githubでも多数事例があるらしいです。 TensorFlowのバージョンを変えると治るとの事でしたのでそうしてみようと思うのですが、変える事によって何か不具合がおきる可能性とかあるでしょうか?
tiitoi

2019/05/28 05:00

> TensorFlowのバージョンを変えると治るとの事でしたのでそうしてみようと思うのですが、変える事によって何か不具合がおきる可能性とかあるでしょうか? TensorFlow は API を頻繁に変更してるので、別の部分で動いていたものが動かなくなるという可能性はもちろんあります。 Q71 さんも指定されているように Keras の Sequencial モデルを使う際は最初に input_shape を指定するのが一般的なやり方なので、キカガクの動画にこだわらず「MNIST keras」で検索して出てくるサイトの中でわかりやすいページを参考にされるといいと思います。
Java_Test2019

2019/05/28 05:18

わかりました。ありがとうございます。
tiitoi

2019/05/28 06:01

TensorFlow 2.0.0-alpha0 では、質問のコードはエラーなく動きました。 input_shape を指定するバージョンも回答に追記しました。
Java_Test2019

2019/05/28 07:20

おお、有難うございます。 ちょっと今、トラブル発生したのでのちに実行してみます。 せっかくご忠告頂いたのに安易にTensorFlowをアンインストールして、再インストールに手間取っております。反省します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問