gpt4 book ai didi

Python/Tensorflow - 在这种情况下,所有精度值均为 "1"是否正常?

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:48 25 4
gpt4 key购买 nike

我有以下二进制文件,其中包含标签、文件名和数据(即像素):

[array([2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1,
0, 2, 1, 0, 2, 1, 0]), array(['10_c.jpg', '10_m.jpg', '10_n.jpg', '1_c.jpg',
'1_m.jpg', '1_n.jpg', '2_c.jpg', '2_m.jpg',
'2_n.jpg', '3_c.jpg', '3_m.jpg', '3_n.jpg',
'4_c.jpg', '4_m.jpg', '4_n.jpg', '5_c.jpg',
'5_m.jpg', '5_n.jpg', '6_c.jpg', '6_m.jpg',
'6_n.jpg', '7_c.jpg', '7_m.jpg', '7_n.jpg',
'8_c.jpg', '8_m.jpg', '8_n.jpg', '9_c.jpg',
'9_m.jpg', '9_n.jpg'],
dtype='<U15'), array([[255, 252, 255, ..., 255, 255, 255],
[136, 137, 138, ..., 114, 110, 111],
[200, 200, 199, ..., 179, 178, 177],
...,
[146, 157, 165, ..., 202, 202, 201],
[228, 225, 222, ..., 219, 221, 223],
[128, 127, 127, ..., 133, 129, 127]])]

我已经给出了标签0后缀为 _n.jpg 的图像, 1对于那些后缀为 _m.jpg 的人,和2对于那些后缀为 _c.jpg 的人

我有以下卷积神经网络 (CNN) 的代码部分:

import numpy as np
import matplotlib.pyplot as plt
import cifar_tools
import tensorflow as tf

data, labels = cifar_tools.read_data('C:\\Users\\abc\\Desktop\\Testing')

x = tf.placeholder(tf.float32, [None, 150 * 150])
y = tf.placeholder(tf.float32, [None, 2])

w1 = tf.Variable(tf.random_normal([5, 5, 1, 64]))
b1 = tf.Variable(tf.random_normal([64]))

w2 = tf.Variable(tf.random_normal([5, 5, 64, 64]))
b2 = tf.Variable(tf.random_normal([64]))

w3 = tf.Variable(tf.random_normal([38*38*64, 1024]))
b3 = tf.Variable(tf.random_normal([1024]))

w_out = tf.Variable(tf.random_normal([1024, 2]))
b_out = tf.Variable(tf.random_normal([2]))

def conv_layer(x,w,b):
conv = tf.nn.conv2d(x,w,strides=[1,1,1,1], padding = 'SAME')
conv_with_b = tf.nn.bias_add(conv,b)
conv_out = tf.nn.relu(conv_with_b)
return conv_out

def maxpool_layer(conv,k=2):
return tf.nn.max_pool(conv, ksize=[1,k,k,1], strides=[1,k,k,1], padding='SAME')

def model():
x_reshaped = tf.reshape(x, shape=[-1, 150, 150, 1])

conv_out1 = conv_layer(x_reshaped, w1, b1)
maxpool_out1 = maxpool_layer(conv_out1)
norm1 = tf.nn.lrn(maxpool_out1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75)
conv_out2 = conv_layer(norm1, w2, b2)
norm2 = tf.nn.lrn(conv_out2, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75)
maxpool_out2 = maxpool_layer(norm2)

maxpool_reshaped = tf.reshape(maxpool_out2, [-1, w3.get_shape().as_list()[0]])
local = tf.add(tf.matmul(maxpool_reshaped, w3), b3)
local_out = tf.nn.relu(local)

out = tf.add(tf.matmul(local_out, w_out), b_out)
return out

model_op = model()

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(model_op, y))
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

correct_pred = tf.equal(tf.argmax(model_op, 1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
onehot_labels = tf.one_hot(labels, 2, on_value=1.,off_value=0.,axis=-1)
onehot_vals = sess.run(onehot_labels)
batch_size = 1
for j in range(0, 5):
print('EPOCH', j)
for i in range(0, len(data), batch_size):
batch_data = data[i:i+batch_size, :]
batch_onehot_vals = onehot_vals[i:i+batch_size, :]
_, accuracy_val = sess.run([train_op, accuracy], feed_dict={x: batch_data, y: batch_onehot_vals})
print(i, accuracy_val)

print('DONE WITH EPOCH')

当我运行该程序时,我得到了 5 个 Epoch 的以下信息:

EPOCH 0
0 1.0
1 1.0
2 0.0
3 0.0
4 0.0
5 1.0
6 0.0
7 0.0
8 0.0
9 0.0
10 0.0
11 1.0
12 1.0
13 0.0
14 0.0
15 0.0
16 1.0
17 0.0
18 0.0
19 0.0
20 1.0
21 1.0
22 0.0
23 1.0
24 0.0
25 1.0
26 0.0
27 0.0
28 0.0
29 1.0
DONE WITH EPOCH
EPOCH 1
0 0.0
1 1.0
2 1.0
3 1.0
4 0.0
5 0.0
6 1.0
7 1.0
8 0.0
9 0.0
10 1.0
11 1.0
12 1.0
13 0.0
14 1.0
15 1.0
16 1.0
17 0.0
18 0.0
19 1.0
20 1.0
21 0.0
22 0.0
23 1.0
24 1.0
25 1.0
26 0.0
27 0.0
28 0.0
29 1.0
DONE WITH EPOCH
EPOCH 2
0 0.0
1 0.0
2 0.0
3 1.0
4 1.0
5 0.0
6 1.0
7 0.0
8 1.0
9 0.0
10 1.0
11 0.0
12 0.0
13 0.0
14 1.0
15 1.0
16 0.0
17 0.0
18 1.0
19 1.0
20 0.0
21 0.0
22 1.0
23 1.0
24 1.0
25 0.0
26 1.0
27 1.0
28 1.0
29 0.0
DONE WITH EPOCH
EPOCH 3
0 0.0
1 1.0
2 1.0
3 0.0
4 0.0
5 1.0
6 0.0
7 0.0
8 1.0
9 1.0
10 1.0
11 0.0
12 0.0
13 1.0
14 0.0
15 0.0
16 0.0
17 1.0
18 1.0
19 0.0
20 1.0
21 1.0
22 1.0
23 0.0
24 0.0
25 1.0
26 0.0
27 1.0
28 0.0
29 1.0
DONE WITH EPOCH
EPOCH 4
0 1.0
1 1.0
2 0.0
3 1.0
4 1.0
5 0.0
6 1.0
7 1.0
8 1.0
9 1.0
10 1.0
11 1.0
12 1.0
13 1.0
14 0.0
15 0.0
16 1.0
17 1.0
18 0.0
19 0.0
20 1.0
21 1.0
22 0.0
23 1.0
24 0.0
25 1.0
26 0.0
27 0.0
28 1.0
29 1.0
DONE WITH EPOCH

根据上述数据,这些值(准确度)是否正常?我问的原因是,对于其他数据(但有 10 个类的大量数据),我注意到原始程序(我做了一些调整以使其适用于我的数据)返回的结果(准确性)如下所示:

EPOCH 0
1 0.104
2 0.1
3 0.136
4 0.14
5 0.124
6 0.156
7 0.16
8 0.172
9 0.16
10 0.164
11 0.148
...
...
...

您认为我得到的结果正常吗(即只有 01 )?

EDIT-1

我已经更改了batch_size至:

batch_size = len(data) // 2

我现在的输出如下:

EPOCH 0
0 0.466667
15 0.666667
DONE WITH EPOCH
EPOCH 1
0 0.666667
15 0.6
DONE WITH EPOCH
EPOCH 2
0 0.333333
15 0.333333
DONE WITH EPOCH
EPOCH 3
0 0.333333
15 0.333333
DONE WITH EPOCH
EPOCH 4
0 0.533333
15 0.666667
DONE WITH EPOCH

这是正确的吗?所以,我有 30 张图像(我知道它们很少,但只是为了演示目的)。批量放置它们的最佳方法是什么?如果上面的输出现在是正确的,是否有更好的方法来表示它?或者,也许对于这么小的数据集,我们可以将它们全部放入一批(即 batch_size = len(data) )?

例如,当我设置batch_size = len(data)时,我得到以下结果:

EPOCH 0
0 0.333333
DONE WITH EPOCH
EPOCH 1
0 0.666667
DONE WITH EPOCH
EPOCH 2
0 0.666667
DONE WITH EPOCH
EPOCH 3
0 0.333333
DONE WITH EPOCH
EPOCH 4
0 0.366667
DONE WITH EPOCH

谢谢。

最佳答案

代码中batch_size的值为1,因此每次运行时

sess.run([train_op, accuracy], feed_dict={x: batch_data, y: batch_onehot_vals})

您只检查一张图片。然后你有以下两行:

correct_pred = tf.equal(tf.argmax(model_op, 1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))

所以本质上, Correct_pred 只是1个数字(0或1),因为它基于一张图片(所以如果 tf.argmax(model_op,1)= tf.argmax(y ,1) 然后 Correct_pred=1。否则等于 0)。

那么准确度就等于这个数字。因此它的值总是0或1。

编辑 1 的回复:从数字上看,这些值是有意义的。您的 batch_size=15,因此精度应该是 1/15=0.0667 的整数倍,表中的所有值似乎确实都是这种情况。之所以应该是 1/15 的整数倍是因为这两行:

correct_pred = tf.equal(tf.argmax(model_op, 1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))

数组 Correct_pred 只是一个 0-1 向量(因为它是 tf.equal 的结果)。 accuracy 就是 Correct_pred 中的值的总和除以批量大小(15)。

关于最佳批量大小,它取决于许多因素。您可以在讨论 here 中阅读更多相关信息。例如。

关于Python/Tensorflow - 在这种情况下,所有精度值均为 "1"是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com