আমি এমএল এবং টেনসরফ্লোতে নতুন (আমি প্রায় কয়েক ঘন্টা আগে শুরু করেছি), এবং সময় সিরিজের পরবর্তী কয়েকটি ডেটা পয়েন্টের পূর্বাভাস দেওয়ার জন্য আমি এটি ব্যবহারের চেষ্টা করছি। আমি আমার ইনপুট নিচ্ছি এবং এটি দিয়ে এটি করছি:
/----------- x ------------\
.-------------------------------.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
'-------------------------------'
\----------- y ------------/
আমি যেটা করছিলাম তা হ'ল এক্সটিকে ইনপুট ডেটা হিসাবে এবং y কে এই ইনপুটটির জন্য পছন্দসই আউটপুট হিসাবে ব্যবহার করা হচ্ছে, যাতে 0-6 দেওয়াতে আমি 1-7 (বিশেষত 7) পেতে পারি। যাইহোক, আমি যখন আমার গ্রাফটিকে ইনপুট হিসাবে এক্স দিয়ে চালিত করি, তখন আমি যা পাই তা একটি পূর্বাভাস যা y এর চেয়ে x এর মতো বেশি লাগে ।
এখানে কোড ( এই পোস্ট এবং এই পোস্টের উপর ভিত্তি করে ):
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plot
import pandas as pd
import csv
def load_data_points(filename):
print("Opening CSV file")
with open(filename) as csvfile:
print("Creating CSV reader")
reader = csv.reader(csvfile)
print("Reading CSV")
return [[[float(p)] for p in row] for row in reader]
flatten = lambda l: [item for sublist in l for item in sublist]
data_points = load_data_points('dataset.csv')
print("Loaded")
prediction_size = 10
num_test_rows = 1
num_data_rows = len(data_points) - num_test_rows
row_size = len(data_points[0]) - prediction_size
# Training data
data_rows = data_points[:-num_test_rows]
x_data_points = np.array([row[:-prediction_size] for row in data_rows]).reshape([-1, row_size, 1])
y_data_points = np.array([row[prediction_size:] for row in data_rows]).reshape([-1, row_size, 1])
# Test data
test_rows = data_points[-num_test_rows:]
x_test_points = np.array([[data_points[0][:-prediction_size]]]).reshape([-1, row_size, 1])
y_test_points = np.array([[data_points[0][prediction_size:]]]).reshape([-1, row_size, 1])
tf.reset_default_graph()
num_hidden = 100
x = tf.placeholder(tf.float32, [None, row_size, 1])
y = tf.placeholder(tf.float32, [None, row_size, 1])
basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=num_hidden, activation=tf.nn.relu)
rnn_outputs, _ = tf.nn.dynamic_rnn(basic_cell, x, dtype=tf.float32)
learning_rate = 0.001
stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, num_hidden])
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, 1)
outputs = tf.reshape(stacked_outputs, [-1, row_size, 1])
loss = tf.reduce_sum(tf.square(outputs - y))
optimizer = tf.train.AdamOptimizer(learning_rate)
training_op = optimizer.minimize(loss)
init = tf.global_variables_initializer()
iterations = 1000
with tf.Session() as sess:
init.run()
for ep in range(iterations):
sess.run(training_op, feed_dict={x: x_data_points, y: y_data_points})
if ep % 100 == 0:
mse = loss.eval(feed_dict={x: x_data_points, y: y_data_points})
print(ep, "\tMSE:", mse)
y_pred = sess.run(stacked_outputs, feed_dict={x: x_test_points})
plot.rcParams["figure.figsize"] = (20, 10)
plot.title("Actual vs Predicted")
plot.plot(pd.Series(np.ravel(x_test_points)), 'g:', markersize=2, label="X")
plot.plot(pd.Series(np.ravel(y_test_points)), 'b--', markersize=2, label="Y")
plot.plot(pd.Series(np.ravel(y_pred)), 'r-', markersize=2, label="Predicted")
plot.legend(loc='upper left')
plot.xlabel("Time periods")
plot.tick_params(
axis='y',
which='both',
left='off',
right='off',
labelleft='off')
plot.show()
নীচের গ্রাফ দেখানো ফলাফলের একটি পূর্বানুমান যে অনুসরণ করে এক্স বদলে বাম (এবং ডান দিকে পূর্বাভাস পয়েন্ট সহ) স্থানান্তরিত হচ্ছে যেমন অনুরূপ হওয়া উচিত Y । স্পষ্টতই ইচ্ছা লাল রেখাটি যতটা সম্ভব নীল রঙের কাছাকাছি হওয়া উচিত।
আমি এই সমস্ত দিয়ে কি করছি আমার কোনও ধারণা নেই, তাই দয়া করে ELI5 করুন।
ওহ, এছাড়াও, আমার ডেটা পয়েন্টগুলি মোটামুটি ছোট সংখ্যা (0.0001 এর ক্রম)। যদি আমি তাদের দ্বারা 1000000 দিয়ে গুণ না করি, ফলাফলগুলি এত ছোট যে চার্টের নীচে লাল রেখা প্রায় সমতল। কেন? আমি অনুমান করছি এটি ফিটনেস ফাংশনে স্কোয়ারের কারণে। ব্যবহারের আগে ডেটাগুলি স্বাভাবিক করা উচিত, এবং যদি তাই হয় তবে কী? 0-1? যদি আমি ব্যবহার করি:
normalized_points = [(p - min_point) / (max_point - min_point) for p in data_points]
আমার ভবিষ্যদ্বাণীটি বিকাশের সাথে সাথে আরও বর্বরভাবে ওঠানামা করছে:
সম্পাদনা: আমি বোবা হয়ে যাচ্ছি এবং কেবল এটির একটি উদাহরণ দিচ্ছি, 500 নয়, আমি না? সুতরাং আমি এটি একাধিক 500-পয়েন্ট নমুনা দেওয়া উচিত, তাই না?