첫 번째 신경망: TensorFlow 2 파트 03
4858 단어 tensorflowbeginnersneuralnetwork
Sequential API는 많은 것을 추상화하고 알고리즘 구현을 훨씬 쉽게 만드는 반면, Subclassing API는 모델에 대한 클래스를 생성한 다음 정방향 패스를 명령적으로 작성하고 사용자 지정 레이어, 활성화 및 교육 루프를 쉽게 작성하여 더 많은 유연성을 제공합니다. 오늘 부분에서는 Sequential API를 사용하여 첫 번째 신경망을 구축할 것입니다.
코드를 실행하는 동안 처음에 다음 코드를 사용하여 일부 경고를 음소거합니다.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
수입:
먼저 tensorflow, keras, numpy 및 matplotlib를 가져와야 합니다.
# First Neural Net
# Train, evaluate, and predict with the model
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
데이터세트:
이제 데이터 세트를 가져와야 합니다. 여기서는 숫자 분류를 위해 손으로 쓴 숫자의 mnist 데이터셋을 사용할 것이며 keras.datasets에 포함되어 있습니다.
# get the dataset
mnist = keras.datasets.mnist
데이터세트를 분할합니다.
mnist 데이터 세트에서 로드하여 학습 및 테스트 세트 가져오기
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape, y_train.shape)
다음으로, 현재 이미지의 값이 0에서 255 사이이기 때문에 데이터를 정규화하려고 합니다. 정규화를 통해 값을 0에서 1 사이로 만들 것입니다.
# normalize: 0,255 -> 0,1
x_train, x_test = x_train / 255.0, x_test / 255.0
다음 코드를 실행하는 데이터를 플로팅하려고 하면 손으로 쓴 처음 6자리 숫자가 제공됩니다.
for i in range(6):
plt.subplot(2,3 i+1)
plt.imshow(x_train[i], cmap='gray')
plt.show()
모델:
이제 이미지를 플로팅하기 위해 위의 코드를 제거하고 모델을 빌드합니다. 우리는 keras.models.Sequential()을 사용하고 모든 다른 레이어의 목록을 전달할 것입니다.
# model
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28,28)), # to flattens image by reducing one dimension of 28 * 28
keras.layers.Dense(128, activation='relu'), # fully connected layer (Dense layer with hidden size of 128),,, we will use relu activation function
keras.layers.Dense(10), # final layer, specify output size, 10 differennt classes
])
모든 다른 레이어를 표시하는 모델 요약을 인쇄합니다.
print(model.summary())
순차 모델을 사용하여 모델을 구축하는 또 다른 방법:
#model = keras.models.Sequential()
#model.add(keras.layers.Flatten(input_shape=(28,28))
#model.add(keras.layers.Dense(128, activation='relu'))
#model.add(keras.layers.Dense(10))
손실 및 옵티마이저를 정의합니다.
일반적으로 다중 클래스 분류 문제의 경우 일반적으로 CategoricalCrossentropy 손실이 사용됩니다. Adam 옵티마이저가 모델에 사용됩니다.
# loss and optimizer
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
optim = keras.optimizers.Adam(lr=0.001)
metrics = ["accuracy"]
모델 컴파일
model.compile(loss=loss, optimizer=optim, metrics=metrics)
훈련:
일부 하이퍼파라미터를 지정하고 훈련 데이터를 공급하여 모델을 훈련할 것입니다. 다음 코드를 실행하고 훈련하는 동안 정확도를 확인하십시오.
#
batch_size = 64
epochs = 5
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, shuffle=True, verbose=2) # verbose for logging, 0 - no output, 1..progress bay, 2-normal logging
모델 평가:
평가를 위해 x 및 y 데이터 모두에 대해 테스트 데이터 세트를 사용합니다. batch_size는 이미지의 일부 배치를 가져오고 배치에서 일부 계산을 수행합니다.
model.evaluate(x_test, y_test, batch_size=batch_size, verbose=2)
예측:
예측에 모델을 사용할 수 있는 여러 가지 옵션이 있습니다.
옵션 1: Softmax 레이어로 새 모델 구축
probability_model = keras.models.Sequential([
model,
keras.layers.Softmax()
])
predictions = probability_model(x_test)
pred_0 = predictions[0]
print(pred_0)
# use np.argmax to get label with highest probability
label_0 = np.argmax(pred_0)
print(label_0)
옵션 2: 원래 모델 + nn.softmax 및 호출 모델(x)
predictions = model(x_test)
predictions = tf.nn.softmax(predictions)
pred_0 = predictions[0]
print(pred_0)
label_0 = np.argmax(pred_0)
print(label_0)
옵션 3: 원래 모델 + nn.softmax 및 호출 model.predict(x)
predictions = model.predict(x_test, batch_size=batch_size)
predictions = tf.nn.softmax(predictions)
pred_0 = predictions[0]
print(pred_0)
label_0 = np.argmax(pred_0)
print(label_0)
두 개 이상의 예측이 있을 때 여러 레이블에 대해 argmax를 호출하십시오.
pred_05s = predictions[0:5]
print(pred_05s.shape)
label_05s = np.argmax(pred_05s, axis=1)
print(label_05s)
Reference
이 문제에 관하여(첫 번째 신경망: TensorFlow 2 파트 03), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wulfi/first-neural-network-tensorflow-2-part-03-2h7l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)