mnist深学習

なぜKeras?ジャンゴのようにORMとして使用

Kerasプログラミング:

Kerasを使用する方法を私たちを助ける10個のニューロンを有する出力層(Y)256、ニューロンの総数を、入力層(X)784個のニューロンの総数を隠れ層(H):我々のような、多層パーセプトロンモデルを確立しますそれを構築しますか?

1、シーケンシャル()モデルの確立:

線順次モデルの複数のニューラルネットワーク層スタックであります

モデル=シーケンシャル()

図2に示すように、入力層及びモデルに隠れ層もし

Kerasの裏切り者がいる限り我々のモデルとして、我々は、ニューラルネットワーク層に追加したときに、(例えば緻密層、Conv2d層など)ニューラルネットワーク層の様々なています

以下は、入力層と隠れ層モデルに追加されます

model.add(高密度(単位= 256 
                          input_dim = 784 
                          kernel_initializer = ' 正常' 
                          活性化 = ' relu'))                

図3に示すように、入力層は、モデルに追加されます。

model.add(高密度(単位= 10、kernel_initializer = ' 正常'、活性化= ' ソフトマックス'))

のは、具体的な例を見てみましょう:

インポートのPdとしてパンダ
 インポートのNPとしてnumpyの
 インポートPLTのようmatplotlib.pyplot
 インポートTFとしてtensorflow
 から tensorflow インポートkeras
%matplotlibの
= fashion_mnist keras.datasets.fashion_mnist 
(train_images、train_labels)、(test_images、test_labels) = fashion_mnist.load_data() 
コールLOAD_DATA方法、それを画面上に表示されない場合は、プログラムの下でそこMNISTデータセットは、ユーザディレクトリを確認するかどうかダウンロード、待つには長い時間
#は、ダウンロードが完了した後にトレーニングセットとテストセットに分け、二つのデータセットになります

これが初めてmnistデータセットである場合、それは(自動ダウンロード)をダウンロードするには多少時間がかかる場合があります

train_images.shapeの   #は、テストセットの数を見て
>>>
(60000、28、28)
train_labels #1 ラベル 
>>>アレイ([9、0、0、...、3,0、5]、DTYPE = UINT8)
test_images.shapeの   #のサンプル・テスト・セットを見て
(10000、28、28)
train_images [0]  最初の画像を見てのように見える 
>>> 
アレイ([0、0、0、0、0、0、0、0、0、0、0、0、0、
          0、0、0 、0、0、0、0、0、0、0、0、0、0、
          0、0]、
       [0、0、0、0、0、0、0、0、0、0、0、0 、0、
          0、0、0、0、0、0、0、0、0、0、0、0、0、
          0、0]、
       [0、0、0、0、0、0、0、0 、0、0、0、0、0、
          0、0、0、0、0、0、0、0、0、0、0、0、0、
          0、0]、
       [0、0、0、0 、0、0、0、0、0、0、0、0、    1 
          0、0、  13、73、0、0、1、4、0、0、0、0、1  1 、0]、
       [0、0、0、0、0、0、0、0、0、0、0、 0、    3 
          0、   36、136、127、62、54、0、0、0、1、3、4 、0、
          0、    3 ]、
       [0、0、0、0、0、0、0、 0、0、0、0、0、    6 
          0、 102、204、176、134、144、123、23、0、0、0、0、12  10 、0]、
       [0、0、0、 0、0、0、0、0、0、0、0、0、0、
          0、 155、236、207、178、107、156、161、109、64、23、77、130 72、15 ]、
       [0、0、0、0、0、0、0、0、0、0、0、    1 、0、
          69、207、223、218、216、216、163、127、121 、122、146、141、88  172、66 ]、
       [0、0、0、0、0、0、0、0、0、    1、1、1 、0、
         200、232、232、233、229 、223、223、215、213、164、127、123、196  229 、0]、
       [0、0、0、0、0、0、0、0、0、0、0、0、0、
         183 、225、216、223、228、235、227、224、222、224、221、223、245  173 、0]、 
       [0、0、0、0、0、0、0、0、0、0、0、0 、0、
        193、228、218、213、198、180、212、210、211、213、223、220、243  202 、0]、
       [0、0、0、0、0、0、0、0、0、    1、3、0、12  219、220、212、218、192、169、227、208、218、224、212、226、197  209、52 ]、
       [0、0、0、0、0、 0、0、0、0、0、    6、0、99  244、222、220、218、203、198、221、215、213、222、220、245、119  167、56 ]、
       [0、 0、0、0、0、0、0、0、0、    4、0、0、55  236、228、230、228、240、232、213、218、223、234、217、217、209 92 、0]、
       [0、0、    1、4、6、7、2、0、0、 0、0、0、237  226、217、223、222、219、222、221、216、223、229、215、218、255  77 、0]、
       [0、    3、0、0、0、 0、0、0、0、62、145、204、228  207、213、221、218、208、211、218、224、223、219、215、224、244  159 、0]、
       [0、 0、0、0、   18、44、82、107、189、228、220、222、217  226、200、205、211、230、224、234、176、188、250、248、233、238 215 、0]、 
       [0、   57、187、208、224、221、224、208、204、214、208、209、200  159、245、193、206、223、255、255、221、234、221、 211、220、232  246 、0]、
       [   3、202、228、224、221、211、211、214、205、205、205、220、240  80、150、255、229、221、188、 154、191、210、204、209、222、228  225 、0]、
       [ 98、233、198、210、222、229、229、234、249、220、194、215、217  241、65、 73、106、117、168、219、221、215、217、223、223、224  229、29 ]、
       [75、204、212、204、193、205、211、225、216、185、197、206、198  213、240、195、227、245、239、223、218、212、209、222、220、 221  230、67 ]、
       [ 48、203、183、194、213、197、185、190、194、192、202、214、219  221、220、236、225、216、199、206、186、 181、177、172、181、205  206、115 ]、
       [0、 122、219、193、179、171、183、196、204、210、213、207、211  210、200、196、194、 191、195、191、198、192、176、156、167、177  210、92 ]、
       [0、0、   74、189、212、191、175、172、175、181、185、188、189188、193、198、204、209、210、210、211、188、188、194、192、216  170 、0]、
       [   2、0、0、0、66、200、222、237、239、 242、246、243、244  221、220、193、191、179、182、182、181、176、166、168、99、58 
          0、0]、
       [0、0、0、0、0、 0、0、   40、61、44、72、41、35 
          0、0、0、0、0、0、0、0、0、0、0、0、0、
          0、0]、
       [0、 0、0、0、0、0、0、0、0、0、0、0、0、
          0、0、0、0、0、0、0、0、0、0、0、0、0、 
          0、0]、
       [0、0、0、0、0、0、0、0、0、0、0、0、0、
          0、0、0、0、0、0、0、0、0、0、0、0 、0、
          0、0]、DTYPE = UINT8)
コードの表示
plt.figure()
plt.imshow(train_images [0]、CMapの = ' グレー')グレー階調表示#あります

plt.imshow(train_images [0]);   #のカラーディスプレイとマットのクラスを表示しません

RGB画像255が最大であるため、画像の規格化処理するように

train_images = train_images / 255.0 
test_imagesの =のtest_images / 255.0

こちらのモデルは以下のとおりです。

=モデルkeras.Sequential([ 
    keras.layers.Flatten(input_shape =(28、28))、  入力データサイズ 
    keras.layers.Dense(128、アクティベーション= tf.nn.relu)、  神経一般要素数は2 ^ Nである 
    keras.layers.Dense(64、アクティベーション= tf.nn.relu)、
    keras.layers.Dense( 10、アクティベーション= tf.nn.softmax)  として与えられるのSoftMax予測カテゴリの確率
] 
#同じことがまた、のようなもののように記述することができますkeras.modelsからは、シーケンシャル読み込みkeras.layersからの高密度インポート
#のモデル#の
#のモデル=シーケンシャル() #を入力層と中間層の確立
#を128、神経#1 model.addの数(高密度(単位=エレメント                #28 * 28のInput_dim = 784、すなわち、入力データサイズ                 kernel_initializer = '通常'、                  アクティベーション= 'RELU'活性化関数をRELU#1として定義され                )) #出力層の作成
#1 model.addを(高密度(=単位64、                 kernel_initializer = '通常'、                  活性化= 'のSoftMax'活性化関数が#ソフトマックスのように定義される))
トレーニングモードモデル 
model.compile(オプティマイザ= ADAM #はオプティマイザセット 
             損失= categorical_crossentropy cross_entropyを使用して設定損失関数を(クロスエントロピー)トレーニング深さの調査結果が良好であった 
             =メトリクス[ " 精度" ]) モデルのセットの評価は正確には、もちろん、また、カスタムをサポートしています
#のトレーニングモデル 
履歴= model.fit(train_images、  トレーニングデータ 
                    train_labels、#1 研修ラベル 
                    エポック= 50、   #1 トレーニング期間10、典型的には特定のレベルは、もはやのモデルの精度増加する到達しない 
                    BATCH_SIZE = 200、である各バッチをトレーニングデータ200倍 
                    冗長= 2、 表示トレーニングプロセス 
                    validation_splitは= 0.2)  は、トレーニングの前に0.8トレーニングおよびバリデーション0.2に分割スケールします着信データkeras 着信データ、予測された結果とタグ比較した後に同じでない場合は、ギャップを損失関数を用いて、上記で定義されているどのように大きな測定し、optimzerとパラメータ調整を取ります

あなたは、精度のACCがますます高くなっている見ることができ、損失が徐々に減少しています。

その訓練されたモデルの後に彼の正解率を評価する方法?

test_losss,test_acc = model.evaluate(test_images,test_labels)
print("Accuracy:",test_acc)
>>>
10000/10000 [==============================] - 0s 33us/step
Accuracy: 0.7233

 那如何判断是否还有进一步的空间呢?

# 绘制出acc和loss
hist_data = pd.DataFrame(history.history) # 先转为DataFrame
hist_data.plot(kind="line")
# 可以看到acc和loss并没有交叉,说明收敛还是不到位的,可以通过增加隐藏层,或者增加epochs

 

预测:

# 推荐
prediction = model.predict_classes(test_images)  # 得到所有标签值
# 不推荐
# predictions = model.predict(test_images)  # 预测所有
# predictions[2]  # 预测给出的是一堆浮点数,得到的是预测label各个值得概率
# np.argmax(predictions[2])  # 利用np获取最大值索引
# test_labels[2]

 这样的预测没有考虑到图像的特征,所有下一个博客将使用卷积神经网络

 

おすすめ

転載: www.cnblogs.com/zhoulixiansen/p/10982136.html