2017-09-26 2 views
1

J'essayais de générer un modèle linéaire simple dans Tensorflow. Voici le code ...modèle linéaire dans le flux tensoriel

N  = 400 
features = 100 
nSteps = 1000 

data = (np.random.randn(N, features), np.random.randint(0, 2, N)) 

W = tf.placeholder(tf.float32, shape=(features,1), name='W') 
b = tf.placeholder(tf.float32, shape=(features,1), name='b') 
d = tf.constant(data[0], dtype=tf.float32) 

result = tf.add(tf.matmul(d, W), b) 

Il se trouve qu'il pourrait y avoir un problème avec les dimensions de b, mais pour une raison quelconque pour autant que je peux dire, ils sont tous ok ...

Vous ne savez pas pourquoi cela génère une erreur. Puis-je avoir une aide s'il vous plait?

Note:

result = tf.matmul(d, W) 

Ceci est ok.

J'ai vérifié la forme du résultat, et est la même que celle de b. Pas vraiment sûr de ce qui pourrait être le problème.

Répondre

3

Dans un modèle linéaire (c'est-à-dire une unité dans la couche de sortie), b doit être un scalaire. Mathématiques, pour une seule observation, vous avez: result = WX + b, où les dimensions W [1 x caractéristiques], X [caractéristiques x 1]. Ensuite, WX est scalaire. Ainsi, b devrait être un scalaire.

Vous devez donc changer b à ce qui suit, pour obtenir le modèle linéaire correct et prendre les dimensions de travail sur:

b = tf.placeholder(tf.float32, shape=(1,1), name='b')