我正在尝试在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) ]]