Matplotlib Tensorflow语义切分

Matplotlib Tensorflow语义切分,matplotlib,neural-network,tensorflow,Matplotlib,Neural Network,Tensorflow,在这里发帖是为了检查我在TensorFlow中实现的一个简单语义分段模型是否有任何错误。这段代码表示我正在对数据库中的一个图像进行的健全性检查,我正试图对模型进行过度拟合。 这是一个二值分类问题,每个图像像素映射到地面真值标签中的[0,1] import tensorflow as tf import numpy as np import matplotlib.pyplot as plt img = plt.imread('image.png') #Image of size [750,750

在这里发帖是为了检查我在TensorFlow中实现的一个简单语义分段模型是否有任何错误。这段代码表示我正在对数据库中的一个图像进行的健全性检查,我正试图对模型进行过度拟合。 这是一个二值分类问题,每个图像像素映射到地面真值标签中的[0,1]

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

img = plt.imread('image.png') #Image of size [750,750,3]
img = plt.imread('map.png') # Ground Truth of size [750, 750]

img = np.expand_dims(img, 0)
lab = np.expand_dims(lab, 0)

w1 = tf.Variable(tf.constant(0.001, shape=[3,3,3,32]))
b1 = tf.Variable(tf.constant(0.0, shape=[32]))

w2 = tf.Variable(tf.constant(0.001, shape=[3,3,32,2]))
b2 = tf.Variable(tf.constant(0.0, shape=[2]))

mul = tf.nn.conv2d(img, w1, strides=[1,1,1,1], padding='SAME')
bias_add = tf.add(mul, b1)
conv1 = tf.nn.relu(bias_add)

mul2 = tf.nn.conv2d(conv1, w2, strides=[1,1,1,1], padding='SAME')
bias_add2 = tf.add(mul2, b2)
conv2 = tf.nn.relu(bias_add2)

sess = tf.InteractiveSession()

lab = lab.astype('int32')

conv2_out = tf.reshape(conv2, [-1, 2])
lab = np.reshape(lab, [-1])

prediction = tf.nn.softmax(pred) # I use this to visualize prediction of the model, and calculate accuracy

loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(conv2_out, lab))

optimizer = tf.train.AdamOptimizer(0.001).minimize(loss)

correct_pred = tf.equal(tf.argmax(prediction, 1), lab)
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.int32)

tf.initialize_all_variables().run()

step = 1 
iter = 5

while step < iter:
    sess.run(optimizer, feed_dict={x: img, y: lab})
    loss_val,acc = sess.run([loss,accuracy], feed_dict={x: img, y: lab})
    print ("Iter:"+ str(step) +" Loss : " + "{:.6f}".format(loss_val)#+ " Accuracy : " + "{:.6f}".format(acc))
    step += 1

print ("optimization finished!")

prediction_logits = prediction.eval()
weights = w1.eval() # first layer learned weights

prediction_logits = np.reshape(prediction_logits, [750,750,2])

plt.figure() # Plotting original image with predicted labels
plt.imshow(img[0,:,:,:])
plt.imshow(prediction_logits[:,:,0], cmap=plt.cm.binary)
plt.show()

plt.figure() # Plotting first layer weights
for i in range(32):
    plt.subplot(8,4,i+1)
    plt.imshow(weights[:,:,:,i])
plt.show()
将tensorflow导入为tf
将numpy作为np导入
将matplotlib.pyplot作为plt导入
img=plt.imread('image.png')#大小为[750750,3]的图像
img=plt.imread('map.png')#大小的基本事实[750750]
img=np.展开尺寸(img,0)
lab=np.展开尺寸(lab,0)
w1=tf.变量(tf.常数(0.001,形状=[3,3,3,32]))
b1=tf.Variable(tf.constant(0.0,shape=[32]))
w2=tf.变量(tf.常数(0.001,形状=[3,3,32,2]))
b2=tf.Variable(tf.constant(0.0,shape=[2]))
mul=tf.nn.conv2d(img,w1,步长=[1,1,1],padding='SAME')
偏差添加=tf.add(mul,b1)
conv1=tf.nn.relu(偏差添加)
mul2=tf.nn.conv2d(conv1,w2,步幅=[1,1,1,1],padding='SAME')
偏差_add2=tf.add(mul2,b2)
conv2=tf.nn.relu(偏差添加2)
sess=tf.InteractiveSession()
lab=lab.astype('int32')
conv2_out=tf.重塑(conv2,[-1,2])
lab=np.重塑(lab,[-1])
prediction=tf.nn.softmax(pred)#我使用它来可视化模型的预测,并计算精度
损失=tf.减少平均值(tf.nn.稀疏\u softmax\u交叉\u熵\u与逻辑(conv2\u out,lab))
优化器=tf.序列AdamOptimizer(0.001).最小化(损失)
校正pred=tf.equal(tf.argmax(预测,1),实验室)
准确度=tf.reduce_平均值(tf.cast(correct_pred,tf.float32))
x=tf.placeholder(tf.float32)
y=tf.placeholder(tf.int32)
tf.initialize_all_variables().run()
步骤=1
iter=5
而步骤
当我运行这个(作为一个交互式会话)时,只是为了训练模型在这张图像上过度拟合,损失最小化,但我的精确度似乎没有改变。我不太确定我是否理解
tf.argmax
函数是如何工作的,或者我是否正确地实现了它,而且无论迭代多少次,精度都会保持在一个值上

想法?另外,我是要正确地绘制图形和预测标签,还是这里有任何错误?(还有任何其他错误——或者我没有遵循的最佳实践,请指出它们)


此外,对权重执行正则化的推荐方法是什么?我发现这是一个可行的选择——但是,我如何将它包括在这个场景中?带损失函数的简单求和

在这行
prediction=tf.nn.softmax(pred)#我使用它来可视化模型的预测,并计算精度
。什么是“pred”?