Mạng nơ-ron Deep Learning đầu tiên của tôi sử dụng Tensorflow
Mạng nơ-ron Deep Learning đầu tiên của tôi sử dụng Tensorflow
Tôi muốn viết một mạng nơ-ron đơn giản với 3 hoặc 4 hiddlen layer sử dụng tensorflow. Tôi đã sử dụng IDE Pycharm và python với tensorflow cho data và sử dụng mạng nơ-ron.
Và đây là code chi tiết. Trước khi chạy, hãy update pycharm và cài đặt tensorflow vào môi trường ảo.
import os
import tensorflow as tf
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
#Tải dữ liệu từ file csv
training_data_df = pd.read_csv(“sales_data_training.csv”, dtype=float)
# Tải dữ liệu X là dữ liệu train, Y là dẽ liệu predict
X_training = training_data_df.drop(‘total_earnings’, axis=1).values
Y_training = training_data_df[[‘total_earnings’]].values
# Tải dữ liệu test từ file csv
test_data_df = pd.read_csv(“sales_data_test.csv”, dtype=float)
# Tương tự tải dữ liệu X và Y như trên
X_testing = test_data_df.drop(‘total_earnings’, axis=1).values
Y_testing = test_data_df[[‘total_earnings’]].values
# dữ liệu đầu vào cần phải đưa về khoảng 0 đến 1
X_scaler = MinMaxScaler(feature_range=(0, 1))
Y_scaler = MinMaxScaler(feature_range=(0, 1))
# Scale dữ liệu trainning cả input và output.
X_scaled_training = X_scaler.fit_transform(X_training)
Y_scaled_training = Y_scaler.fit_transform(Y_training)
#Cần phải làm tương tự cho cả tập test.
X_scaled_testing = X_scaler.transform(X_testing)
Y_scaled_testing = Y_scaler.transform(Y_testing)
# Định nghĩa một số parameters
learning_rate = 0.001
training_epochs = 100
# Định nghĩa số lượng đầu vào và đầu ra.
number_of_inputs = 9
number_of_outputs = 1
# Định nghĩa số lượng node cho từng layer của mạng.
layer_1_nodes = 50
layer_2_nodes = 100
layer_3_nodes = 50
# Section One:Định nghĩa layers của mạng nơ-ron.
# Input Layer
with tf.variable_scope(‘input’):
X = tf.placeholder(tf.float32, shape=(None, number_of_inputs))
# Layer 1
with tf.variable_scope(‘layer_1’):
weights = tf.get_variable(“weights1”, shape=[number_of_inputs, layer_1_nodes], initializer=tf.contrib.layers.xavier_initializer())
biases = tf.get_variable(name=”biases1", shape=[layer_1_nodes], initializer=tf.zeros_initializer())
layer_1_output = tf.nn.relu(tf.matmul(X, weights) + biases)
# Layer 2
with tf.variable_scope(‘layer_2’):
weights = tf.get_variable(“weights2”, shape=[layer_1_nodes, layer_2_nodes], initializer=tf.contrib.layers.xavier_initializer())
biases = tf.get_variable(name=”biases2", shape=[layer_2_nodes], initializer=tf.zeros_initializer())
layer_2_output = tf.nn.relu(tf.matmul(layer_1_output, weights) + biases)
# Layer 3
with tf.variable_scope(‘layer_3’):
weights = tf.get_variable(“weights3”, shape=[layer_2_nodes, layer_3_nodes], initializer=tf.contrib.layers.xavier_initializer())
biases = tf.get_variable(name=”biases3", shape=[layer_3_nodes], initializer=tf.zeros_initializer())
layer_3_output = tf.nn.relu(tf.matmul(layer_2_output, weights) + biases)
# Output Layer
with tf.variable_scope(‘output’):
weights = tf.get_variable(“weights4”, shape=[layer_3_nodes, number_of_outputs], initializer=tf.contrib.layers.xavier_initializer())
biases = tf.get_variable(name=”biases4", shape=[number_of_outputs], initializer=tf.zeros_initializer())
prediction = tf.matmul(layer_3_output, weights) + biases
# Section Two: Định nghĩa hàm chi phí, và đo độ chính xác suốt quá trình training.
with tf.variable_scope(‘cost’):
Y = tf.placeholder(tf.float32, shape=(None, 1))
cost = tf.reduce_mean(tf.squared_difference(prediction, Y))
# Section Three: Định nghĩa hàm tối ưu
with tf.variable_scope(‘train’):
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)
# Tạo một phương thức để ghi lại tiến độ của mạng.
with tf.variable_scope(‘logging’):
tf.summary.scalar(‘current_cost’, cost)
summary = tf.summary.merge_all()
# Khởi tạo một session để có thể chạy Tensorflow.
with tf.Session() as session:
# Chạy khởi tạo biến toàn cục để khởi tạo các biến và các lớp của mạng nơ-ron.
session.run(tf.global_variables_initializer())
# Tạo file log để ghi lại tiến độ chạy
# Lưu trữ để kiểm tra quá trình training riêng biệt.
training_writer = tf.summary.FileWriter(‘./logs/training’, session.graph)
testing_writer = tf.summary.FileWriter(‘./logs/testing’, session.graph)
# Chạy chương trình tối ưu hóa để train mạng.
for epoch in range(training_epochs):
# Cung cấp nguồn cấp dữ liệu cho dữ liệu khi đưa vào training
session.run(optimizer, feed_dict={X: X_scaled_training, Y: Y_scaled_training})
# Mỗi 5 training steps,in ra quá trình
if epoch % 5 == 0:
# Lấy chi phí hiện tại bằng cách chạy thao tác "cost" trên tập train và test.
training_cost, training_summary = session.run([cost, summary], feed_dict={X: X_scaled_training, Y:Y_scaled_training})
testing_cost, testing_summary = session.run([cost, summary], feed_dict={X: X_scaled_testing, Y:Y_scaled_testing})
# Viết lại trạng thái vào file (chúng ta có thể xem bằng TensorBoard)
training_writer.add_summary(training_summary, epoch)
testing_writer.add_summary(testing_summary, epoch)
# In quá trình training hiện tại
print(“Epoch: {} — Training Cost: {} Testing Cost: {}”.format(epoch, training_cost, testing_cost))
# Kết thúc training
#Lấy chi phí cuối cùng
final_training_cost = session.run(cost, feed_dict={X: X_scaled_training, Y: Y_scaled_training})
final_testing_cost = session.run(cost, feed_dict={X: X_scaled_testing, Y: Y_scaled_testing})
print(“Final Training cost: {}”.format(final_training_cost))
print(“Final Testing cost: {}”.format(final_testing_cost))
# Model đã được train hãy lấy nó để đoán ra bộ dữ liệu trong tập test của chúng ta.
# giờ thì chạy hoạt động "prediction"
Y_predicted_scaled = session.run(prediction, feed_dict={X: X_scaled_testing})
# Trả lại dữ liệu về trạng thái trước đó (unscale)
Y_predicted = Y_scaler.inverse_transform(Y_predicted_scaled)
real_earnings = test_data_df[‘total_earnings’].values[0]
predicted_earnings = Y_predicted[0][0]
print(“The actual earnings of Game #1 were ${}”.format(real_earnings))
print(“Our neural network predicted earnings of ${}”.format(predicted_earnings))
Trên đây chỉ là một mạng nơ-ron đơn giản và không tối ưu hóa. Bài viết này sẽ giúp bạn bắt đầu với việc học deep learning. Hãy vui vẻ và bắt đầu với tensorflow và deep learning
Tham khảo: Writing My first Deep Learning neural network using Tensorflow