我遇到了如下问题:
回溯(最近通话最近): 张量(“ add_2:0”,shape =(),dtype = float32) 文件“ C:/Users/397400665/Desktop/Exercise/Exercise1/train.py”,第156行,在 张量(“ accuracy:0”,shape =(),dtype = float32) train_step(批处理数据,批处理签名) 在train_step中的文件“ C:/Users/397400665/Desktop/Exercise/Exercise1/train.py”第128行 [train_op,global_step,train_summary_op,损失,准确性],feed_back 文件“ E:\ python \ python36 \ lib \ site-packages \ tensorflow \ python \ client \ session.py”, 877行,正在运行 run_metadata_ptr) 文件“ E:\ python \ python36 \ lib \ site-packages \ tensorflow \ python \ client \ session.py”, _run中的第1076行 str(subfeed_t.get_shape()))) ValueError:无法为形状为((?,384)'的Tensor'dropout / mul:0'输入形状()的值
我试图找出哪个参数导致了这个问题,但实际上我失败了。有人可以帮助我吗? 我认为这是因为我在过滤器中犯了一些错误。但是,当我看这部分时,几乎找不到任何可能导致此错误的错误。我已经调查了sesson.py,但是这里没有任何用处。我不知道鞭打参数是错误的,我也找不到错误。 我的代码如下:
import datetime
import os
import numpy as np
import tensorflow as tf
from tensorflow.contrib import learn
import data_helpers
positive_datafile = "./data/rt-polarity.pos"
negative_datafile = "./data/rt-polarity.neg"
data, sign = data_helpers.load_data_and_labels(positive_datafile, negative_datafile)
# 获取信息中,data是基础数据,sign中是对于数据的标识
max_length = max(len(s.split(" ")) for s in data)
fix_length = learn.preprocessing.VocabularyProcessor(max_length)
fixed_data = np.array(list(fix_length.fit_transform(data)))
# Unified sentence length
np.random.seed(1)
random_index = np.random.permutation(np.arange(len(fixed_data)))
data_random = fixed_data[random_index]
sign_random = sign[random_index]
sample_num = int(0.1 * len(sign))
test_num = int(0.1 * len(sign))
data_sample = data_random[:sample_num]
data_test = data_random[sample_num:sample_num + test_num]
data_train = data_random[sample_num + test_num:]
sign_sample = sign_random[:sample_num]
signal_test = sign_random[sample_num:sample_num + test_num]
signal_train = sign_random[sample_num + test_num:]
# Picture Part
with tf.Graph().as_default():
x = tf.placeholder(tf.int32, [None, data_train.shape[1]], name="train_data")
y = tf.placeholder(tf.float32, [None, signal_train.shape[1]], name="y")
drop = tf.placeholder(tf.float32, name="None")
l2_loss = tf.constant(0.0)
sess = tf.Session()
with tf.device("/cpu:0"): # 这里如果交给GPU执行会出现错误,因此转交给cpu执行
embedding_w = tf.Variable(tf.random_uniform([max_length, 128], -1.0, 1.0), name="embedding_w")
chars = tf.nn.embedding_lookup(embedding_w, x)
char_expend = tf.expand_dims(chars, -1) # add the last demision as channel
pool_outputs = []
for i, size in enumerate([3, 4, 5]):
filter_shape = [size, 128, 1, 128]
filter_w = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="filter_w")
filter_b = tf.Variable(tf.constant(1.0, shape=[128]))
conv = tf.nn.conv2d(
char_expend,
filter_w,
strides=[1, 1, 1, 1],
padding="VALID",
name="conv"
)
h = tf.nn.relu(tf.nn.bias_add(conv, filter_b), name="relu")
pooled = tf.nn.max_pool(
h,
ksize=[1, data_train.shape[1] - size + 1, 1, 1],
strides=[1, 1, 1, 1],
padding="VALID",
name="pooled"
)
pool_outputs.append(pooled)
total_filters = 384 # 128*3
#total_filters = 384 # 128*3
h_pool = tf.concat(pool_outputs, 3)
h_pool_flat = tf.reshape(h_pool, [-1, total_filters])
drop_ban = tf.nn.dropout(h_pool_flat, drop)
l2_loss = tf.constant(0.0)
out_put_w = tf.get_variable("out_put_w", shape=[total_filters, signal_train.shape[1]],
initializer=tf.contrib.layers.xavier_initializer())
out_put_b = tf.Variable(tf.constant(0.1, shape=[signal_train.shape[1]]), name="out_put_b")
l2_loss += tf.nn.l2_loss(out_put_w)
l2_loss += tf.nn.l2_loss(out_put_b)
scores = tf.nn.xw_plus_b(drop_ban, out_put_w, out_put_b, name="scores")
predictions = tf.argmax(scores, 1, name="predictions")
l2_reg_lambda = 0.0
losses = tf.nn.softmax_cross_entropy_with_logits(logits=scores, labels=y)
loss = tf.reduce_mean(losses) + l2_reg_lambda * l2_loss
correct_predictions = tf.equal(predictions, tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")
global_step = tf.Variable(0, name="step", trainable=False)
optimizer = tf.train.AdamOptimizer(1e-3)
grads_and_vars = optimizer.compute_gradients(l2_loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
grad_summaries = []
for g, v in grads_and_vars:
if g is not None:
grad_hist_summary = tf.summary.histogram("{}/grad/hist".format(v.name), g)
sparsity_summary = tf.summary.scalar("{}/grad/sparsity".format(v.name), tf.nn.zero_fraction(g))
grad_summaries.append(grad_hist_summary)
grad_summaries.append(sparsity_summary)
grad_summaries_merged = tf.summary.merge(grad_summaries)
out_dir = os.path.abspath(os.path.join(os.path.curdir, "runs"))
loss_summary = tf.summary.scalar("loss", loss)
acc_summary = tf.summary.scalar("accuracy", accuracy)
train_summary_op = tf.summary.merge([loss_summary, acc_summary, grad_summaries_merged])
train_summary_dir = os.path.join(out_dir, "summaries", "train")
train_summary_writer = tf.summary.FileWriter(train_summary_dir, sess.graph)
dev_summary_op = tf.summary.merge([loss_summary, acc_summary])
dev_summary_dir = os.path.join(out_dir, "summaries", "train")
dev_summary_writer = tf.summary.FileWriter(train_summary_dir, sess.graph)
checkpoint_dir = os.path.abspath(os.path.join(out_dir))
checkpoint_prefix = os.path.join(checkpoint_dir, "model")
if not os.path.exists(checkpoint_dir):
os.makedirs(checkpoint_dir)
saver = tf.train.Saver(tf.global_variables(), max_to_keep=5)
fix_length.save(os.path.join(out_dir, "vocab"))
sess.run(tf.global_variables_initializer())
def train_step(data_x, data_y):
feed_back = {
x: data_x,
y: data_y,
drop_ban: 0.5,
}
print(loss)
print(accuracy)
_, step, summaries, loss_train, accuracy_train = sess.run(
[train_op, global_step, train_summary_op, loss, accuracy], feed_back
)
time_str = datetime.datetime.now().isoformat()
print("{}:step {},loss {:g},acc {:g}".format(time_str, step, loss, accuracy))
train_summary_writer.addsummary(summaries, step)
def dev_step(input_x, input_y, writer=None):
feed_back = {
x: input_x,
y: input_y,
drop_ban: 1.0
}
step, summaries, dev_loss, dev_accuracy = sess.run(
[global_step, dev_summary_op, loss, accuracy],
feed_back
)
if writer:
writer.add_summary(summaries, step)
batches = data_helpers.batch_iter(
list(zip(data_train, signal_train)),
64,
200
)
for batch in batches:
batch_data, batch_sign = zip(*batch)
train_step(batch_data, batch_sign)
current_step = tf.train.global_step(sess, global_step)
if current_step % 100 == 0:
print("Evaluation:")
dev_step(data_sample, sign_sample, writer=dev_summary_writer)
print("")
path = saver.save(sess, checkpoint_prefix, global_step=current_step)
print("Saved model checkpoint to {}\n".format(path))