变量和增量大小问题(TensorFlow优化器)

时间:2019-06-11 21:53:05

标签: python tensorflow

我正在尝试在TensorFlow中编写自定义模型。不幸的是,似乎我所有的张量都在优化阶段被调整大小,并且一切都在破裂。我已经包含了我的代码。

def weights_biases_placeholder(n_dim, n_classes):
    X = tf.placeholder(tf.float32,[None, n_dim])
    Y = tf.placeholder(tf.float32,[None,n_classes])
    avg_input = tf.placeholder(tf.float32,[1,n_dim])
    xi1 = tf.Variable(tf.random_normal([1,n_dim]), name='input1')
    xo1 = tf.Variable(tf.random_normal([1,n_classes]), name='output1')
    xi2 = tf.Variable(tf.random_normal([1,n_classes]), name='input2')
    xo2 = tf.Variable(tf.random_normal([1,n_classes]), name='output2')
    w1 = tf.Variable(tf.random_normal([n_dim,n_classes],stddev=0.01),name='weights1')
    b1 = tf.Variable(tf.random_normal([1,n_classes]),name='bias1')
    w2 = tf.Variable(tf.random_normal([n_classes,n_classes],stddev=0.01),name='weights2')
    b2 = tf.Variable(tf.random_normal([1,n_classes]),name='bias2')
    return X, Y, avg_input, xi1, xo1, xi2, xo2, w1, b1, w2, b2

这部分或多或少是具有不同激活功能的致密层

def forward_pass1(w,b,X):
    out = tf.nn.relu(tf.matmul(X, w) + b)
    return out
def forward_pass2(w,b,X):
    out = tf.nn.softmax(tf.matmul(X, w) + b)
    return out
def multiclass_cost(xo2, Y):
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=xo2,labels=Y))
    return cost
def init():
    return tf.global_variables_initializer()
def train_op(learning_rate,cost):
    op_train = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
    return op_train

这是我实际定义模型的地方。请注意,只有avg_input和diff1实际上依赖于输入批处理(X)

train_X, train_Y, test_X, test_Y = read_infile()
X, Y, avg_input, xi1, xo1, xi2, xo2, w1, b1, w2, b2 = weights_biases_placeholder(train_X.shape[1], train_Y.shape[1])
avg_input = tf.reduce_mean(X, axis=0)
diff1 = avg_input - tf.reduce_mean(xi1, axis=0)
diff2 = forward_pass1(w1, b1, xi1) - xo1
diff3 = forward_pass2(w2, b2, xi2) - xo2
cost = multiclass_cost(xo2, Y)
cost = cost + tf.nn.l2_loss(diff1) + tf.nn.l2_loss(diff2) + tf.nn.l2_loss(diff3)
learning_rate, epochs = 0.01, 1000
op_train = train_op(learning_rate, cost)
init = init()
loss_trace = []
accuracy_trace = []

进行培训:

with tf.Session() as sess:
    sess.run(init)

    sess.run(op_train,feed_dict={X:train_X, Y:train_Y})

这是结果:

with tf.Session() as sess:

    sess.run(init)



    sess.run(op_train,feed_dict={X:train_X, Y:train_Y})

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1333     try:
-> 1334       return fn(*args)
   1335     except errors.OpError as e:

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)
   1318       return self._call_tf_sessionrun(
-> 1319           options, feed_dict, fetch_list, target_list, run_metadata)
   1320 

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata)
   1406         self._session, options, feed_dict, fetch_list, target_list,
-> 1407         run_metadata)
   1408 

InvalidArgumentError: var and delta do not have the same shape[1,10] [55000,10]
     [[{{node GradientDescent_19/update_output2_30/ApplyGradientDescent}}]]

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-191-08764ccffbe4> in <module>
      2     sess.run(init)
      3 
----> 4     sess.run(op_train,feed_dict={X:train_X, Y:train_Y})

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
    927     try:
    928       result = self._run(None, fetches, feed_dict, options_ptr,
--> 929                          run_metadata_ptr)
    930       if run_metadata:
    931         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1150     if final_fetches or final_targets or (handle and feed_dict_tensor):
   1151       results = self._do_run(handle, final_targets, final_fetches,
-> 1152                              feed_dict_tensor, options, run_metadata)
   1153     else:
   1154       results = []

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1326     if handle is None:
   1327       return self._do_call(_run_fn, feeds, fetches, targets, options,
-> 1328                            run_metadata)
   1329     else:
   1330       return self._do_call(_prun_fn, handle, feeds, fetches)

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1346           pass
   1347       message = error_interpolation.interpolate(message, self._graph)
-> 1348       raise type(e)(node_def, op, message)
   1349 
   1350   def _extend_graph(self):

InvalidArgumentError: var and delta do not have the same shape[1,10] [55000,10]
     [[node GradientDescent_19/update_output2_30/ApplyGradientDescent (defined at <ipython-input-189-45b99ac5bf52>:2) ]]

Caused by op 'GradientDescent_19/update_output2_30/ApplyGradientDescent', defined at:
...

InvalidArgumentError (see above for traceback): var and delta do not have the same shape[1,10] [55000,10]
     [[node GradientDescent_19/update_output2_30/ApplyGradientDescent (defined at <ipython-input-189-45b99ac5bf52>:2) ]]


0 个答案:

没有答案