फिलिप मालकज़क और सेनी 123 के सुझावों और टिप्पणियों के बाद, मैंने टेन्सफोर्लो में एक तंत्रिका नेटवर्क लागू किया ताकि यह जांच सके कि क्या होता है जब हम इसे 2-वर्ग वर्ग की भविष्यवाणी (और इंटरपोलेट) करने के लिए सिखाने की कोशिश करते हैं। निरंतर अंतराल
तो मूल रूप से, अंतराल के अंदर (और करीब भी) [-7,7], फिट काफी सही है, और फिर यह बाहर या नीचे रैखिक रूप से जारी रहता है। यह देखना अच्छा लगता है कि कम से कम शुरुआत में, नेटवर्क के आउटपुट की ढलान x^2
की ढलान "मिलान" करने की कोशिश करती है।,
भी नंबर पर प्रशिक्षण
अंत में अगर बजाय मैं प्रशिक्षित: हम परीक्षण अंतराल बढ़ाते हैं, तो दो रेखांकन काफी एक बहुत वितरित हो जाते हैं, के रूप में एक नीचे आकृति में देख सकते हैं अंतराल में सभी पूर्णांकों के सेट पर नेटवर्क [-100,100], और इसे इस अंतराल में सभी पूर्णांक (यहां तक कि अजीब) के सेट पर लागू करें, मुझे लगता है:
छवि का उत्पादन करने के लिए नेटवर्क को प्रशिक्षण देते समय ऊपर, मैंने युग को 2500 तक बढ़ा दिया बेहतर सटीकता प्राप्त करें। शेष पैरामीटर अपरिवर्तित रहे। तो ऐसा लगता है कि प्रशिक्षण अंतराल "अंदर" इंटरपोलिंग काफी अच्छी तरह से काम करता है (शायद 0 के आसपास के क्षेत्र को छोड़कर, जहां फिट थोड़ा खराब है)।
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.python.framework.ops import reset_default_graph
#preparing training data
train_x=np.linspace(-7,7,300).reshape(-1,1)
train_y=train_x**2
#setting network features
dimensions=[50,50,50,1]
epochs=500
batch_size=5
reset_default_graph()
X=tf.placeholder(tf.float32, shape=[None,1])
Y=tf.placeholder(tf.float32, shape=[None,1])
weights=[]
biases=[]
n_inputs=1
#initializing variables
for i,n_outputs in enumerate(dimensions):
with tf.variable_scope("layer_{}".format(i)):
w=tf.get_variable(name="W",shape=[n_inputs,n_outputs],initializer=tf.random_normal_initializer(mean=0.0,stddev=0.02,seed=42))
b=tf.get_variable(name="b",initializer=tf.zeros_initializer(shape=[n_outputs]))
weights.append(w)
biases.append(b)
n_inputs=n_outputs
def forward_pass(X,weights,biases):
h=X
for i in range(len(weights)):
h=tf.add(tf.matmul(h,weights[i]),biases[i])
h=tf.nn.relu(h)
return h
output_layer=forward_pass(X,weights,biases)
cost=tf.reduce_mean(tf.squared_difference(output_layer,Y),1)
cost=tf.reduce_sum(cost)
optimizer=tf.train.AdamOptimizer(learning_rate=0.01).minimize(cost)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#train the network
for i in range(epochs):
idx=np.arange(len(train_x))
np.random.shuffle(idx)
for j in range(len(train_x)//batch_size):
cur_idx=idx[batch_size*j:(batch_size+1)*j]
sess.run(optimizer,feed_dict={X:train_x[cur_idx],Y:train_y[cur_idx]})
#current_cost=sess.run(cost,feed_dict={X:train_x,Y:train_y})
#print(current_cost)
#apply the network on the test data
test_x=np.linspace(-30,30,300)
network_output=sess.run(output_layer,feed_dict={X:test_x.reshape(-1,1)})
plt.plot(test_x,test_x**2,color='r',label='y=x^2')
plt.plot(test_x,network_output,color='b',label='network output')
plt.legend(loc='center')
plt.show()
पाठ चर में डेटा का स्वरूप क्या है:
यहाँ कोड है कि मैं पहली बार यह आंकड़ा के लिए इस्तेमाल किया है? –
क्या आप सुनिश्चित हैं कि एक तंत्रिका नेटवर्क ऐसा करने में सक्षम होना चाहिए? तंत्रिका नेटवर्क मेरे अनुभव में गणितीय अनुमान में वास्तव में अच्छा नहीं हैं। – Seanny123
@ Seanny123 मुझे नहीं पता। मैं इसे भी खोजने की कोशिश कर रहा हूं - अगर यह सामान्य रूप से तंत्रिका नेटवर्क या एआई के लिए एक अच्छी समस्या है। यदि एनएन नहीं है, तो रैखिक वर्गीकरण एक अच्छा फिट होगा? – gammay