TensorFlow-단일 레이어 퍼셉트론
단일 레이어 퍼셉트론을 이해하려면 인공 신경망 (ANN)을 이해하는 것이 중요합니다. 인공 신경망은 생물학적 신경 회로의 기능에서 영감을받은 메커니즘 인 정보 처리 시스템입니다. 인공 신경망에는 서로 연결된 많은 처리 장치가 있습니다. 다음은 인공 신경망의 개략도입니다.
다이어그램은 은닉 유닛이 외부 레이어와 통신하는 것을 보여줍니다. 입력 및 출력 장치는 네트워크의 숨겨진 계층을 통해서만 통신합니다.
노드와의 연결 패턴, 레이어 당 총 뉴런 수와 함께 입력과 출력 사이의 노드 수준, 총 레이어 수는 신경망의 아키텍처를 정의합니다.
아키텍처에는 두 가지 유형이 있습니다. 이러한 유형은 다음과 같이 기능성 인공 신경망에 중점을 둡니다.
- 단일 레이어 퍼셉트론
- 다층 퍼셉트론
단일 레이어 퍼셉트론
단일 레이어 퍼셉트론은 최초로 제안 된 신경 모델입니다. 뉴런의 로컬 메모리 내용은 가중치 벡터로 구성됩니다. 단일 레이어 퍼셉트론의 계산은 가중치의 벡터의 해당 요소에 값을 곱한 값을 각각 입력 벡터의 합계 계산에 대해 수행합니다. 출력에 표시되는 값은 활성화 기능의 입력이됩니다.
TensorFlow를 사용하여 이미지 분류 문제에 대한 단일 레이어 퍼셉트론의 구현에 집중하겠습니다. 단일 레이어 퍼셉트론을 설명하는 가장 좋은 예는 "로지스틱 회귀"의 표현입니다.
이제 다음과 같은 로지스틱 회귀 훈련의 기본 단계를 고려해 보겠습니다.
가중치는 훈련 시작시 임의의 값으로 초기화됩니다.
훈련 세트의 각 요소에 대해 원하는 출력과 실제 출력 간의 차이로 오류가 계산됩니다. 계산 된 오류는 가중치를 조정하는 데 사용됩니다.
이 프로세스는 최대 반복 횟수에 도달 할 때까지 전체 학습 세트에서 발생한 오류가 지정된 임계 값보다 작지 않을 때까지 반복됩니다.
로지스틱 회귀 평가를위한 전체 코드는 다음과 같습니다.
# Import MINST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot = True)
import tensorflow as tf
import matplotlib.pyplot as plt
# Parameters
learning_rate = 0.01
training_epochs = 25
batch_size = 100
display_step = 1
# tf Graph Input
x = tf.placeholder("float", [None, 784]) # mnist data image of shape 28*28 = 784
y = tf.placeholder("float", [None, 10]) # 0-9 digits recognition => 10 classes
# Create model
# Set model weights
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# Construct model
activation = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax
# Minimize error using cross entropy
cross_entropy = y*tf.log(activation)
cost = tf.reduce_mean\ (-tf.reduce_sum\ (cross_entropy,reduction_indices = 1))
optimizer = tf.train.\ GradientDescentOptimizer(learning_rate).minimize(cost)
#Plot settings
avg_set = []
epoch_set = []
# Initializing the variables init = tf.initialize_all_variables()
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(mnist.train.num_examples/batch_size)
# Loop over all batches
for i in range(total_batch):
batch_xs, batch_ys = \ mnist.train.next_batch(batch_size)
# Fit training using batch data sess.run(optimizer, \ feed_dict = {
x: batch_xs, y: batch_ys})
# Compute average loss avg_cost += sess.run(cost, \ feed_dict = {
x: batch_xs, \ y: batch_ys})/total_batch
# Display logs per epoch step
if epoch % display_step == 0:
print ("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost))
avg_set.append(avg_cost) epoch_set.append(epoch+1)
print ("Training phase finished")
plt.plot(epoch_set,avg_set, 'o', label = 'Logistic Regression Training phase')
plt.ylabel('cost')
plt.xlabel('epoch')
plt.legend()
plt.show()
# Test model
correct_prediction = tf.equal(tf.argmax(activation, 1), tf.argmax(y, 1))
# Calculate accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print
("Model accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))
산출
위의 코드는 다음 출력을 생성합니다.
로지스틱 회귀는 예측 분석으로 간주됩니다. 로지스틱 회귀는 데이터를 설명하고 하나의 종속 이진 변수와 하나 이상의 명목 또는 독립 변수 간의 관계를 설명하는 데 사용됩니다.