[授業5週目19日目]機械学習-10


1.学習内容


今日は勉強を続けました.
ニューラルネットワークは3種類に分けられ,DNをベースに学習する.画像はCNNで処理する.
「activation」は、どの値を入力したときに通過するかを判断する関数です.
「softmax」は、3つの値を入力すると1を基準にした式です.
最後に書いた理由は、エクスポートされた値を1に基づいて各%を作成するためです.
from keras import models
from keras import layers

network = models.Sequential() 
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))#Dense뉴런을 몇개 넣을건지(숫자 데이터는 Dense, 이미지는 Conv2D)
network.add(layers.Dense(10, activation='softmax'))
#2개의 신경망, 앞은 512개, 뒤는 10개.
上のニューラルネットワークを完了します.服従だと言う.
network.compile(optimizer='rmsprop', #가중치를 조절해주는 것.('rmsprop')
                loss='categorical_crossentropy', #분류하는 것.손실값 계산 3개 이상 판별.
                metrics=['accuracy']) #무슨 지표로 신경망을 동작시키는지.
これでニューラルネットワークの準備ができました
オプティマイザによって重み値を調整する方法は、傾斜降下法の「Gradient Descent」を探し、傾斜上昇時に後方に傾斜し、下降時に上下に傾斜すると0の最適値になります.最初から最後までチェックする方法もありますが、デメリットは時間がかかることなので、他の方法があり、たぶん何度かスキップする方法です.
いろいろありますが、よく使われているのはrmspropとAdamです.
今イメージを用意して、ニューラルネットワークによって形を変えます.60000,28,28を60002828に変更
コンピューターは60000,28,28を2次元モデル、60002828を1次元モデルとしているので、これを使うと便利です.
train_images = train_images.reshape(60000, 28 * 28)
train imagesタイプから見ると、整数型8ビットで、実数型に変換すべきです.
train_images = train_images.astype('float32') / 255 #0~255사이의 값을 위치시키겠다는 의미.
すぐにtest imagesも変わりました.
test_images = test_images.reshape(10000, 28*28)
test_images = test_images.astype('float32') / 255

私たちはデジタル画像を識別する資料を書いています.数番目に印刷された次の結果は、計算可能な数字ではなく、区別可能な数字であるカテゴリです.
次のように入力します.
from tensorflow.keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
ここまでやるのは、データを準備し、ニューラルネットワークを構築することです.今は彼に勉強させさえすればいい.
network.fit(train_images, train_labels, epochs=5, batch_size=128)#batch~한번 돌릴때 데이터 사이즈 정함.
ニューラルネットワークで用いられる逆伝搬アルゴリズム(BackPropagation Algorithm)は,パラメータを用いて入力から出力まで各層の重みを計算する逆伝搬(Forward Pass),逆伝搬(Forward Pass),逆伝搬(Back Pass)に分けられる.データセット全体について、このプロセス(順方向伝達+後方向伝達)が完了すると、epochと見なすことができます.
逆伝播アルゴリズムとは何か分からない場合でも、epochはデータセット全体について学習を完了したと理解できますが、学習モデルは難しくありません.
epochs=40の場合、40回の完全なデータを使用して学習します.
参考資料:
https://m.blog.naver.com/qbxlvnf11/221449297033
では、以下のように勉強します.

これにより損失値が発生し,これは擎天柱がニューラルネットワークを調節し,重み値を変えてから回転する.
これを評価するためにevaluateでtestデータを入れて評価します.
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc', test_acc)

次は映画評論データの分類の仕事をしました.前処理済み.10000次元のベクトルに変換して使用します.
from keras.datasets import imdb
(train_data, train_label), (test_data, test_label) = imdb.load_data(num_words=10000)#중요한 만개만 추려서 가져옴.keras 문법
テストデータの数は以下の通りです.
len(test_data) #문자수 계산

コメントはすべて数字に変換し、以下のように英語に書いて印刷します.

# word_index는 단어와 정수 인덱스를 매핑한 딕셔너리입니다
word_index = imdb.get_word_index()
# 정수 인덱스와 단어를 매핑하도록 뒤집습니다
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
# 리뷰를 디코딩합니다. # 0, 1, 2는 '패딩', '문서 시작', '사전에 없음'을 위한 인덱스이므로 3을 뺍니다
decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])

decoded_review

単語を数字で積極的か消極的かを区別する.

2.難点と解決策


私は数字の単語を1万個の配列に並べます.これらの関数を作ることができます.
これは理解できません.私はまたビデオを見ました.
def vectorize_sequences(sequences, dimension=10000): #넘겨받을 숫자를'sequences'로 받음. 0~9999 즉 만차원을 만들 변수.
    results = np.zeros((len(sequences),dimension)) #0으로 만개짜리 배열을 채우고 해당되는 값에만 1로 넣음. 튜플타입으로 표시해야함. 하나의 파라메터로 인식할수 있게끔.
    len(sequences)은 단어의 길이만큼 배열은 만듦.

    for i, sequence in enumerate(sequences): #반복가능한 개체로 바꿔줌. index번호가 자동으로 생긴다. i에 index값이, 각각의 데이터 값이 'sequence'에 들어감.
        results[i, sequence] = 1. #1.0 이란뜻
    return results
for文は1を対応する単語の位置に置きます.すべての単語の数に1を足す.
これらの変換を次のように保存します.
X_train = vectorize_sequences(train_data)
X_test = vectorize_sequences(test_data)
これをミス型に変える(置換ラベル)
y_train = np.asarray(train_label).astype('float32')
y_test = np.asarray(test_label).astype('float32')
ニューラルネットワークを「モデル」と呼び,3つの改訂図を作成する.ニューラルネットワークに入る最初のニューロンは16個、2番目のニューロンも16個(数の正解はないが、真ん中でニューロンの数を減らすことはできない.情報の損失のため)あり、3番目は結論を出すために1つしかしない.入力データの形状は10000個である必要があります.
0、1(正、負)の値が必ず現れるのでsigmotd関数を使用し、この値を初めて使用するのでreluを使用します.
from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,))) #레이어 안 신경의 계수
model.add(layers.Dense(16, activation='relu')) #첫번째만 입력에 대한 모양 지정해주면 됨
model.add(layers.Dense(1, activation='sigmoid'))
モデルにオプションを追加します.


model.compile(optimizer='rmsprop,
             loss='binary_crossentropy', #분류문제 둘중하나가 나와야 해서'binary_crossentropy'를 써야 함. 
             metrics='accuracy') #평가지표
X_val = X_train[:10000] #슬라이싱 기법, 학습데이터에서 만개를 갈라냄. 앞을 생략함(그럼 앞에서부터 만개란 소리)
partial_X_train = X_train[10000:]  #만개 이후 나머지 부분

y_val = y_train[:10000]
partial_y_train = y_train[10000:]
今、彼らに勉強させ、成功したかどうかを検証します.まず15000(partic X train)件のみを学習し,10000件で検証する.
history = model.fit(partial_X_train, 
          partial_y_train,
          epochs=3,
          batch_size=512,
          validation_data=(X_val, y_val))  #결과를 검증하는 작업.
history_dict = history.history #위에서 실행했던 결과들이 나옴.
history_dict.keys() #어떤 내용이 있는지 나옴.

これをグラフで見るために、次のコードを書きます.どの線から繰り返しを止めるべきかがわかります.
import matplotlib.pyplot as plt
acc = history.history['accuracy']
val_acc = history.history['val_accuracy'] 
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(1, len(acc) + 1) #1부터 20까지 acc의 총개수를 지정. 추가로 1칸정도 더 밀어준다.
x値に繰返し関数(epochs)を指定し、yに損失関数(loss)を指定してグラフを描画します.重複時の損失がどれくらいあるかがわかります.epochsは0から20まで、損失は0から0.7までです.
検証損失はある時点に下がり、上昇し始めます.(<-学習に非常に適したデータであり、この場合は学習を停止しなければならない.)
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'r-', label='Validation loss')
plt.title('Trining and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
しかし予想通りグラフがないので、親オプティマイザを「オプティマイザ」に設定します.RMSProp(lr=0.01)」に変更します.
'from keras import losses
from keras import metrics
from tensorflow.keras importオプティマイザを追加します」.
RMSProp(lr=0.01)では設定学習量と同様の現象が現れる.

これを見て、3~4回勉強するときが一番いいと思います.だから上で時代を変えると最も正確なパターンが見えます.
モデルの評価を開始します.
results = model.evaluate(X_test, y_test)
評価はテスト値に準ずる.
はっきり見えるように変数にしました.

精度は82%程度,損失値は71%程度であった.
このモデルで予測値を出力します.
model.predict(X_test) #y값을 돌려줌.

1をポジティブ後期,0をネガティブ後期とし,何か不満が見られる.

3.勉強の心得


もっとよく見ると、今学んだことが目に入ったようです.しかし、同じように新しいニューロンネットワークを勉強して、また難しいと思います.