我有一个模型,我用于图像识别.我正在训练模型识别三个类,每个类有1500-3000个图像.我正在监控训练期间的交叉熵和准确性,我看到它们随着模型训练而得到改善.训练结束后,我重新加载模型并用它来预测一些额外的图像.为了证明我所看到的我然后使用该模型来预测4个新图像的类成员资格.一个图像是合法的,一个是全0,一个是1,一个是空数组.我的数据是缩放的,所以这基本上给了我一个全0的数组,一个在.5左右,一个在1左右,另一个在0附近.下面是我重新加载模型和预测新图像的代码.
ckpt = tf.train.get_checkpoint_state("./complex_model/")
saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path + '.meta')
x_image = tf.get_collection("x")[0]
keep_prob = tf.get_collection("keep_prob")[0]
batch_size_var = tf.get_collection("batch_size")[0]
logits = tf.get_collection("logits")[0]
y = tf.get_collection("y")[0]
with tf.Session() as sess:
saver.restore(sess, ckpt.model_checkpoint_path)
logger.info("Model restored: {0}".format(ckpt.model_checkpoint_path))
image, _ = ImageUtil().reformat(images, None, 3)
image = np.concatenate((image, np.ndarray([1,60,60, 1])))
image_names.append("no val")
image = np.concatenate((image, np.ones([1,60,60, 1])))
image_names.append("ones")
image = np.concatenate((image, np.zeros([1,60,60, 1])))
image_names.append("zeros")
feed_dict = {x_image: image, keep_prob: 1, batch_size_var: image.shape[0]}
prediction, logits = sess.run([y, logits], feed_dict=feed_dict)
Run Code Online (Sandbox Code Playgroud)
我可以看到重新加载的模型是最新的,因为我正在使用全局步骤并训练数千次迭代,并且它总是使用正确的全局步骤附加数加载模型.但是,该模型预测我提供的任何数据的相同logits和概率.我错过了一步还是忽略了会引起这种情况的事情?下面是类预测的JSON响应,我已经验证了这正是我的sess.run返回的内容.我在训练期间包含了断点,以确保在训练阶段所有图像都不会返回相同的logits,但事实并非如此.
"predictions": {
"/data/predict/actual_image.jpg": [
0.39970365166664124,
0.3874140679836273,
0.21288223564624786 …Run Code Online (Sandbox Code Playgroud) 我在TensorFlow中有一个图表,我根据数百个时期的32个观测值进行了训练.我现在想要根据训练过的图表预测一些新数据,所以我已经保存并重新加载它但是我被迫总是传递与我的批量大小相同的观察数量,因为我已经在我的地方声明了一个占位符与批量大小相对应的图表.如何让我的图表接受任何数量的观察?
我应该如何配置这个以便我可以训练任何数量的观察结果,然后再运行不同的数量?
下面是代码的一些重要部分的摘录.构建图表:
graph = tf.Graph()
with graph.as_default():
x = tf.placeholder(tf.float32, shape=[batch_size, self.image_height, self.image_width, 1], name="data")
y_ = tf.placeholder(tf.float32, shape=[batch_size, num_labels], name="labels")
# Layer 1
W_conv1 = weight_variable([patch_size, patch_size, 1, depth], name="weight_1")
b_conv1 = bias_variable([depth], name="bias_1")
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1, name="conv_1") + b_conv1, name="relu_1")
h_pool1 = max_pool_2x2(h_conv1, name="pool_1")
#Layer 2
#W_conv2 = weight_variable([patch_size, patch_size, depth, depth*2])
#b_conv2 = bias_variable([depth*2])
#h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
#h_pool2 = max_pool_2x2(h_conv2)
# Densely Connected Layer
W_fc1 = weight_variable([self.image_height/4 * self.image_width/2 * depth*2, depth], …Run Code Online (Sandbox Code Playgroud)