なぜ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の #は、テストセットの数を見て
>>>
train_labels #1 ラベル >>>アレイ([9、0、0、...、3,0、5]、DTYPE = UINT8)
test_images.shapeの #のサンプル・テスト・セットを見て
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、189、 188、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)
>>>
那如何判断是否还有进一步的空间呢?
# 绘制出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]
这样的预测没有考虑到图像的特征,所有下一个博客将使用卷积神经网络