के लिए टेन्सफोर्लो में 'इष्टतम' चर प्रारंभिकरण और सीखने की दर मैं मैन्स्रिक्स कारककरण की समस्या - टेन्सफोर्लो में एक बहुत ही सरल अनुकूलन की कोशिश कर रहा हूं। एक मैट्रिक्स V (m X n)
को देखते हुए, इसे W (m X r)
और में विघटित करें। मैं here से मैट्रिक्स कारककरण के लिए एक ढाल वंश आधारित टेन्सफोर्लो आधारित कार्यान्वयन उधार ले रहा हूं।मैट्रिक्स कारककरण
मैट्रिक्स वी अपने मूल रूप में के बारे में विवरण, प्रविष्टियों की हिस्टोग्राम के रूप में किया जाएगा इस प्रकार है:
की [0, 1], मैं निम्नलिखित पूर्व प्रसंस्करण प्रदर्शन के पैमाने पर प्रविष्टियों लाने के लिए।
f(x) = f(x)-min(V)/(max(V)-min(V))
सामान्य करने के बाद, डेटा के हिस्टोग्राम की तरह लग रहे हैं निम्नलिखित:
मेरे प्रश्न हैं:
- डेटा की प्रकृति को देखते हुए: 0 और 1 और सबसे करीब प्रविष्टियों के बीच 1 से 0 तक,
W
औरH
के लिए इष्टतम प्रारंभिकता क्या होगी? - विभिन्न लागत फ़ंक्शन के आधार पर सीखने की दर को कैसे परिभाषित किया जाना चाहिए:
|A-WH|_F
और|(A-WH)/A|
?
न्यूनतम काम कर उदाहरण के रूप में निम्नानुसार होगा:
import tensorflow as tf
import numpy as np
import pandas as pd
V_df = pd.DataFrame([[3, 4, 5, 2],
[4, 4, 3, 3],
[5, 5, 4, 4]], dtype=np.float32).T
इस प्रकार, V_df लगता है:
0 1 2
0 3.0 4.0 5.0
1 4.0 4.0 5.0
2 5.0 3.0 4.0
3 2.0 3.0 4.0
अब, कोड को परिभाषित डब्ल्यू, एच
V = tf.constant(V_df.values)
shape = V_df.shape
rank = 2 #latent factors
initializer = tf.random_normal_initializer(mean=V_df.mean().mean()/5,stddev=0.1)
#initializer = tf.random_uniform_initializer(maxval=V_df.max().max())
H = tf.get_variable("H", [rank, shape[1]],
initializer=initializer)
W = tf.get_variable(name="W", shape=[shape[0], rank],
initializer=initializer)
WH = tf.matmul(W, H)
लागत और अनुकूलक को परिभाषित करना:
f_norm = tf.reduce_sum(tf.pow(V - WH, 2))
lr = 0.01
optimize = tf.train.AdagradOptimizer(lr).minimize(f_norm)
सत्र चल रहा है:
max_iter=10000
display_step = 50
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in xrange(max_iter):
loss, _ = sess.run([f_norm, optimize])
if i%display_step==0:
print loss, i
W_out = sess.run(W)
H_out = sess.run(H)
WH_out = sess.run(WH)
मैंने महसूस किया कि जब मैं initializer = tf.random_uniform_initializer(maxval=V_df.max().max())
की तरह कुछ के लिए इस्तेमाल किया, मैं मैट्रिक्स डब्ल्यू और एच ऐसे मिल गया है कि उनके उत्पाद वी की तुलना में काफी अधिक था मैं भी महसूस किया कि सीखने दर रखने (lr
) .0001 होने के लिए शायद बहुत धीमी थी।
मैं सोच रहा था कि मैट्रिक्स कारककरण की समस्या के लिए अच्छी शुरुआत और सीखने की दर को परिभाषित करने के लिए अंगूठे के नियम हैं या नहीं।
प्रश्न बहुत है अच्छी तरह से उजागर, लेकिन आईएमओ यह विषय है। सीखने की दर और प्रारंभिक matrices की तरह ट्यूनिंग पैरामीटर, आमतौर पर संबोधित समस्या पर निर्भर करता है, और आप अनुकूलक दस्तावेज में प्रदान की तुलना में बेहतर ** राय ** नहीं मिलेगा। – rll
@ आरएल: मैं आपके बिंदु को समझता हूं। मैंने इस सवाल को संपादित किया है और इस समस्या में शामिल डेटा की सटीक प्रकृति के बारे में अधिक जानकारी प्रदान की है। मुझे लगता है कि ऐसी सेटिंग्स काफी आम हो सकती हैं (0 और 1 के बीच सामान्यीकृत डेटा) –
मैं आरएल के साथ सहमत हूं - इष्टतम सीखने की दर और प्रारंभिक matrices आपके पर निर्भर करता है डेटा/समस्या कथन और अक्सर आपके मॉडल से सर्वश्रेष्ठ प्रदर्शन प्राप्त करने के लिए मैन्युअल ट्यूनिंग की आवश्यकता होती है। वैसे, आपके द्वारा लिंक किए गए कोड उदाहरण में, वे गैर-नकारात्मक मैट्रिक्स कारककरण को हल कर रहे हैं। क्या आपके पास 'डब्ल्यू' और/या 'एच' पर भी यह बाधा है या क्या 'डब्ल्यू' और 'एच 'मनमाने ढंग से matrices हो सकता है? – kaufmanu