TensorflowのMNISTの使用を解析します。
5906 ワード
2017年に何の技術が一番人気があるかといえば、グーグルのリーディングの深さがTensorflowを学ぶことです。本論文では深さ学習の入門例MNISTを簡単に述べます。
深さ学習の簡単な紹介
まず、いくつかの概念を簡単に区別します。人工知能、機械学習、深さ学習、神経ネットワーク。このいくつかの単語は最も頻繁に出現するはずですが、彼らはどのような違いがありますか?
人工知能:人間は直感によって解決できる問題、例えば、自然言語理解、画像認識、音声認識など、コンピュータでは解決しにくいです。人工知能はこのような問題を解決します。
機械学習:もし一つの任務が任務Tにあるならば、経験Eの増加に伴って、効果Pも増加します。このプログラムは経験から学ぶことができると思います。
深度学習:その核心は簡単な特徴グループを自動的により複雑な特徴に合成し、これらの特徴で問題を解決することである。
神経ネット:最初は生物学の概念で、一般的には脳神経元、接点、細胞などからなるネットワークを指しています。意識を発生させ、生物思考と行動を助けます。その後、人工知能は神経ネットワークから啓発され、人工神経ネットワークを発展させました。
図を見れば分かります。次の図です。
MNIST解析
MNISTは深学習の経典入門デモで、彼は6万枚の訓練写真と1万枚のテスト写真から構成されています。各写真は28*28サイズで、しかも白黒で構成されています。TensorFlowはこのデータセットと関連した操作を倉庫に封入しました。次はMNISTの学習過程を一歩ずつ解読します。
上の図はMNISTの写真4枚です。これらの写真は伝統的な意味ではありません。jpgまたはjpg形式の写真です。jpgまたはjpgの画像フォーマットは、多くの干渉情報を持っています。(例えば、データブロック、ピクチャヘッド、ピクチャテール、長さなど)、これらの画像は簡単な二次元配列に処理されます。
マトリクスの値があるところから構成されている図形は、左の図形と似ています。なぜこのようにしたのかというと、モデルをより簡単で明瞭にするためです。特徴がよりはっきりしている。
まずモデルのコードとトレーニングモデルを見ます。
x(ピクチャの特徴値):ここでは28*28=784列のデータを使って一つのピクチャの構成を表しています。つまり、各点はこのピクチャの特徴です。これはよく理解できます。各点は画像の様子や表現の意味に影響を与えます。影響の大きさが違っています。なぜ28×28の行列を1行784列の1次元配列にするのかというと、より直感的に分かりやすいからだと推測します。
W(特徴値に対応する重み):この値は非常に重要であり、我々が深く学習する過程は、特徴を発見し、一連のトレーニングを経て、それぞれの特徴が結果に与える影響の重みを導出することである。
b(バイアス量):線形に行くためです。(なぜこの値が必要なのかはよく分かりません。)
y(予測の結果):単一のサンプルはどの数字の確率で予測されますか?例えば、可能な結果は「1.07476616-4.54194021 2.9807549-7.42985344 3.9253793 1.676178.59438515-6.65950203 1.68721473-0.96531」であり、それぞれ0、1、2、3、4、5、6の確率を表します。この配列に対して、結果は6(8.59438515)である。
y_実結果):MNISTからのトレーニングセットは、各ピクチャに対応する真の値が6であれば、「0 0 0 0 0 0 1 0 0」と表示されます。
更に次の2行のコードは損失関数(交差エントロピー)と勾配降下アルゴリズムであり、重み付けとバイアス量の値を絶えず調整することによって、計算された予測結果と提供された実結果との差を段階的に減少させて、トレーニングモデルの目的を達成する。
アルゴリズムは決定したらモデルのトレーニングを開始できます。
後の二行のコードには全部注釈があります。もう疲れません。最後の行のコードを見ます。
コードが作動した後、正確率は92%ぐらいで変動することを発見しました。この時私達はどのような写真なのか見てみたいです。予測が正確ではないです。次のコードを追加します。
予測の値は[[1.822347-4.872425058 2.63988-6.6350136 2.6366072 2.30682945 8.5905228-7.205581 1.455373-0.90134078]です。
対応は数字6です。
実際の値は[0.0.0.0.0.1.0.0.0.0.0.0.]です。
対応は数字5です。
写真はどうですか?
確かに5に似ています。6に似ています。
全体としては、92%の正確性しかないのか、それとも比較的低いのか、後で画像を識別するのに適した畳み込み神経ネットワークを解析します。正確率は99%以上に達することができます。
いくつかの体験と感想
私自身はiOSの開発で、人工知能の波に向かって勉強を始めました。人工知能は最終的に私達の生活を変えて、未来の人気のある学科になると思います。この一ヶ月余りの独学で、一番難しいのは自分の困難を克服することだと思います。AIに関する経験が全くないからです。それに、仕事の年限が長くて、線形代数、確率論などの知識はもう先生に返しました。だから、初めの時はいつも繰り返して迷っています。しかし、その後考えてみると、AIのことを勉強しないと、数年後にはAIの発展がますます成熟してきます。その時、勉強したいと思っても、なかなか追いつけないです。それに、コンピューターに思考させること自体はとてもエキサイティングなことです。勉強したいなら、何か理由がありますか?みんなと励まし合います。
参考記事:
https://zhuanlan.zhihu.com/p/25482889
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap 1/c 1 s 0.
ここで、TensorflowのMNISTを解析するための文章を紹介します。もっと関連するTensorflow MNISTの内容は以前の文章を検索してください。また、下記の関連記事を見てください。これからもよろしくお願いします。
深さ学習の簡単な紹介
まず、いくつかの概念を簡単に区別します。人工知能、機械学習、深さ学習、神経ネットワーク。このいくつかの単語は最も頻繁に出現するはずですが、彼らはどのような違いがありますか?
人工知能:人間は直感によって解決できる問題、例えば、自然言語理解、画像認識、音声認識など、コンピュータでは解決しにくいです。人工知能はこのような問題を解決します。
機械学習:もし一つの任務が任務Tにあるならば、経験Eの増加に伴って、効果Pも増加します。このプログラムは経験から学ぶことができると思います。
深度学習:その核心は簡単な特徴グループを自動的により複雑な特徴に合成し、これらの特徴で問題を解決することである。
神経ネット:最初は生物学の概念で、一般的には脳神経元、接点、細胞などからなるネットワークを指しています。意識を発生させ、生物思考と行動を助けます。その後、人工知能は神経ネットワークから啓発され、人工神経ネットワークを発展させました。
図を見れば分かります。次の図です。
MNIST解析
MNISTは深学習の経典入門デモで、彼は6万枚の訓練写真と1万枚のテスト写真から構成されています。各写真は28*28サイズで、しかも白黒で構成されています。TensorFlowはこのデータセットと関連した操作を倉庫に封入しました。次はMNISTの学習過程を一歩ずつ解読します。
上の図はMNISTの写真4枚です。これらの写真は伝統的な意味ではありません。jpgまたはjpg形式の写真です。jpgまたはjpgの画像フォーマットは、多くの干渉情報を持っています。(例えば、データブロック、ピクチャヘッド、ピクチャテール、長さなど)、これらの画像は簡単な二次元配列に処理されます。
マトリクスの値があるところから構成されている図形は、左の図形と似ています。なぜこのようにしたのかというと、モデルをより簡単で明瞭にするためです。特徴がよりはっきりしている。
まずモデルのコードとトレーニングモデルを見ます。
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
# x
x = tf.placeholder(tf.float32, [None, 784])
# w ( )
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
#
y_ = tf.placeholder(tf.float32, [None, 10])<br>
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# mnist.train
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# y y_ , ,
correct_prediction = tf.equal(tf.arg_max(y, 1), tf.arg_max(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
y_: mnist.test.labels}))
まず第一行はMNISTのデータセットを取得します。一つ一つ説明します。x(ピクチャの特徴値):ここでは28*28=784列のデータを使って一つのピクチャの構成を表しています。つまり、各点はこのピクチャの特徴です。これはよく理解できます。各点は画像の様子や表現の意味に影響を与えます。影響の大きさが違っています。なぜ28×28の行列を1行784列の1次元配列にするのかというと、より直感的に分かりやすいからだと推測します。
W(特徴値に対応する重み):この値は非常に重要であり、我々が深く学習する過程は、特徴を発見し、一連のトレーニングを経て、それぞれの特徴が結果に与える影響の重みを導出することである。
b(バイアス量):線形に行くためです。(なぜこの値が必要なのかはよく分かりません。)
y(予測の結果):単一のサンプルはどの数字の確率で予測されますか?例えば、可能な結果は「1.07476616-4.54194021 2.9807549-7.42985344 3.9253793 1.676178.59438515-6.65950203 1.68721473-0.96531」であり、それぞれ0、1、2、3、4、5、6の確率を表します。この配列に対して、結果は6(8.59438515)である。
y_実結果):MNISTからのトレーニングセットは、各ピクチャに対応する真の値が6であれば、「0 0 0 0 0 0 1 0 0」と表示されます。
更に次の2行のコードは損失関数(交差エントロピー)と勾配降下アルゴリズムであり、重み付けとバイアス量の値を絶えず調整することによって、計算された予測結果と提供された実結果との差を段階的に減少させて、トレーニングモデルの目的を達成する。
アルゴリズムは決定したらモデルのトレーニングを開始できます。
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
mnist.train.next_batch(100)は、トレーニングセットから一度に100枚の画像データを抽出してトレーニングし、1000回を循環して訓練の目的を達成する。後の二行のコードには全部注釈があります。もう疲れません。最後の行のコードを見ます。
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
y_: mnist.test.labels}))
mnist.test.imagsとmnist.test.labelsはテストセットです。テスト用です。accuracyは予測精度です。コードが作動した後、正確率は92%ぐらいで変動することを発見しました。この時私達はどのような写真なのか見てみたいです。予測が正確ではないです。次のコードを追加します。
for i in range(0, len(mnist.test.images)):
result = sess.run(correct_prediction, feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])})
if not result:
print(' :',sess.run(y, feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])}))
print(' :',sess.run(y_,feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])}))
one_pic_arr = np.reshape(mnist.test.images[i], (28, 28))
pic_matrix = np.matrix(one_pic_arr, dtype="float")
plt.imshow(pic_matrix)
pylab.show()
break
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
y_: mnist.test.labels}))
for循環内の指定は一旦resultがfalseであれば、予測値と実際値が一致しないピクチャが現れたことを表しています。その後、値と画像をそれぞれ印刷してみます。予測の値は[[1.822347-4.872425058 2.63988-6.6350136 2.6366072 2.30682945 8.5905228-7.205581 1.455373-0.90134078]です。
対応は数字6です。
実際の値は[0.0.0.0.0.1.0.0.0.0.0.0.]です。
対応は数字5です。
写真はどうですか?
確かに5に似ています。6に似ています。
全体としては、92%の正確性しかないのか、それとも比較的低いのか、後で画像を識別するのに適した畳み込み神経ネットワークを解析します。正確率は99%以上に達することができます。
いくつかの体験と感想
私自身はiOSの開発で、人工知能の波に向かって勉強を始めました。人工知能は最終的に私達の生活を変えて、未来の人気のある学科になると思います。この一ヶ月余りの独学で、一番難しいのは自分の困難を克服することだと思います。AIに関する経験が全くないからです。それに、仕事の年限が長くて、線形代数、確率論などの知識はもう先生に返しました。だから、初めの時はいつも繰り返して迷っています。しかし、その後考えてみると、AIのことを勉強しないと、数年後にはAIの発展がますます成熟してきます。その時、勉強したいと思っても、なかなか追いつけないです。それに、コンピューターに思考させること自体はとてもエキサイティングなことです。勉強したいなら、何か理由がありますか?みんなと励まし合います。
参考記事:
https://zhuanlan.zhihu.com/p/25482889
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap 1/c 1 s 0.
ここで、TensorflowのMNISTを解析するための文章を紹介します。もっと関連するTensorflow MNISTの内容は以前の文章を検索してください。また、下記の関連記事を見てください。これからもよろしくお願いします。