我试图建立一个卷积神经网络,但我偶然发现了一些非常奇怪的问题。
首先是第一件事,这是我的代码:
import tensorflow as tf
import numpy as np
import matplotlib.image as mpimg
import glob
x = []
y = 1
for filename in glob.glob('trainig_data/*.jpg'):
im = mpimg.imread(filename)
x.append(im)
if len(x) == 10:
break
epochs = 5
weights = [tf.Variable(tf.random_normal([5,5,3,32],0.1)),
tf.Variable(tf.random_normal([5,5,32,64],0.1)),
tf.Variable(tf.random_normal([5,5,64,128],0.1)),
tf.Variable(tf.random_normal([75*75*128,1064],0.1)),
tf.Variable(tf.random_normal([1064,1],0.1))]
def CNN(x, weights):
output = tf.nn.conv2d([x], weights[0], [1,1,1,1], 'SAME')
output = tf.nn.relu(output)
output = tf.nn.conv2d(output, weights[1], [1,2,2,1], 'SAME')
output = tf.nn.relu(output)
output = tf.nn.conv2d(output, weights[2], [1,2,2,1], 'SAME')
output = tf.nn.relu(output)
output = tf.reshape(output, [-1,75*75*128])
output = tf.matmul(output, weights[3])
output = tf.nn.relu(output)
output = tf.matmul(output, weights[4])
output = tf.reduce_sum(output)
return output
sess = tf.Session()
prediction = CNN(tf.cast(x[0],tf.float32), weights)
cost = tf.reduce_mean(tf.square(prediction-y))
train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
init = tf.global_variables_initializer()
sess.run(init)
for e in range(epochs):
print('epoch:',e+1)
for x_i in x:
prediction = CNN(tf.cast(x_i,tf.float32), weights)
sess.run([cost, train])
print(sess.run(cost))
print('optimization finished!')
print(sess.run(prediction))
现在我的问题出现了:
在做了一些调试之后我发现问题必须来自优化器,因为在我通过优化器加权之前,成本和预测都不是1.0和0。
我希望这是足够的信息,你可以帮我解决我的问题。
PS。我已尝试使用tf.truncated_normal
代替tf.random_normal
答案 0 :(得分:2)
我认为我遇到了代码问题。您需要定义占位符以提供输入,您没有任何占位符。您正在将常数值(第一个图像)x [0]的张量流投射传递给模型。每次在每个时期调用prediction = CNN(...)时,您的代码都会定义一个新的张量流计算图。总的来说,您每次都要定义一个模型,为它提供一个恒定的图像。这是我为之前准备的MNIST图像定义TensorFlow CNN模型的链接: https://github.com/dipendra009/MNIST_TF-Slim/blob/master/MNIST_TensorFlow.ipynb 。我希望它有所帮助。另外,请查看占位符的TensorFlow文档,这将有助于您更好地理解它。