TensorFlow卷积神经网络实现,图片与对应标签的拟合。一直显示卡在正在运行。 10C

#python3代码
#TensorFlow卷积神经网络实现,图片与对应标签的拟合
#程序不报错,一直显示正在运行
#请问错在哪里?
#数据集 https://pan.baidu.com/s/1Z7_ULAW3LFrUk4WkHC0s3Q

import os
import numpy as np
from PIL import Image
import tensorflow as tf
import matplotlib.pyplot as plt

#-------------获取数据集,构造批数据:batch-----------------------------------------

def get_files(file_dir):
pictures = []
numbers = []

for file in os.listdir(file_dir): # 7000.jpg
    name = file.split(sep='.')
    pictures.append(file_dir+"\\"+file)
    numbers.append(name[0])

print('There are %d pictures'%(len(pictures)))


temp = np.array([pictures,numbers])
temp = temp.transpose()
np.random.shuffle(temp)

pictures_list = list(temp[:,0])
numbers_list = list(temp[:,1])

#numbers_list = [int(float(i)) for i in numbers_list]

return  pictures_list,numbers_list
#返回两个list

def get_batch(image,label,image_W,image_H,batch_size,capacity): # image = pictures label = numbers
image = tf.cast(image,tf.string)
label = tf.cast(label,tf.int32)
#tf.cast()用来做类型转换

input_queue = tf.train.slice_input_producer([image,label])
#加入队列
label = input_queue[1]

image_contents = tf.read_file(input_queue[0])
image = tf.image.decode_jpeg(image_contents,channels=3)

#jpeg或者jpg格式都用decode_jpeg函数,其他格式可以去查看官方文档

image = tf.image.resize_image_with_crop_or_pad(image,image_W,image_H)
#resize

image = tf.image.per_image_standardization(image)
#对resize后的图片进行标准化处理

image_batch,label_batch = tf.train.batch([image,label],batch_size = batch_size,num_threads=16,capacity = capacity)

label_batch = tf.reshape(label_batch,[batch_size])



return image_batch,label_batch
#获取两个batch,两个batch即为传入神经网络的数据

#-----------卷积神经网络节点,搭建卷积神经网络----------------------------------------------------

def conv_op(input_op,name,kh,kw,n_out,dh,dw):
n_in = input_op.get_shape()[-1].value

with tf.name_scope(name) as scope:
    kernel=tf.get_variable(scope+"w",
        shape=[kh,kw,n_in,n_out],dtype=tf.float32,
        initializer=tf.contrib.layers.xavier_initializer_conv2d())

    conv=tf.nn.conv2d(input_op,kernel,(1,dh,dw,1),padding='SAME')
    bias_init_val=tf.constant(0.0,shape=[n_out],dtype=tf.float32)
    biases=tf.Variable(bias_init_val,trainable=True,name='b')
    z=tf.nn.bias_add(conv,biases)
    activation=tf.nn.relu(z,name=scope)
    return activation

def fc_op(input_op,name,n_out):
n_in=input_op.get_shape()[-1].value

with tf.name_scope(name) as scope:
    kernel = tf.get_variable(scope+"w",shape=[n_in,n_out],
            dtype=tf.float32,
            initializer=tf.contrib.layers.xavier_initializer())
    biases=tf.Variable(tf.constant(0.1,
            shape=[n_out],dtype=tf.float32),name='b')
    activation=tf.nn.relu_layer(input_op,kernel,biases,name=scope)
    return activation

def fc_end_layer(inputs,in_size,out_size,activation_function=None):
Weights=tf.Variable(tf.random_normal([in_size,out_size]))
biases=tf.Variable(tf.zeros([1,out_size])+0.1)

Wx_plus_b=tf.matmul(inputs,Weights)+biases

if activation_function is None:
    outputs=Wx_plus_b
else:
    outputs=activation_function(Wx_plus_b)
return outputs

def mpool_op(input_op,name,kh,kw,dh,dw):
return tf.nn.max_pool(input_op,ksize=[1,kh,kw,1],
strides=[1,dh,dw,1],padding='SAME',name=name)

def inference_op(input_op,keep_prob):

conv1_1=conv_op(input_op,name="conv1_1",kh=3,kw=3,n_out=64,dh=1,
                dw=1)
conv1_2=conv_op(conv1_1,name="conv1_2",kh=3,kw=3,n_out=64,dh=1,
                dw=1)
pool1=mpool_op(conv1_2,name="pool1",kh=2,kw=2,dw=2,dh=2)


conv2_1=conv_op(pool1,name="conv2_1",kh=3,kw=3,n_out=128,dh=1,
                dw=1)
conv2_2=conv_op(conv2_1,name="conv2_2",kh=3,kw=3,n_out=128,dh=1,
                dw=1)
pool2=mpool_op(conv2_2,name="pool2",kh=2,kw=2,dh=2,dw=2)


conv3_1=conv_op(pool2,name="conv3_1",kh=3,kw=3,n_out=256,dh=1,
                dw=1)
conv3_2=conv_op(conv3_1,name="conv3_2",kh=3,kw=3,n_out=256,dh=1,
                dw=1)
conv3_3=conv_op(conv3_2,name="conv3_3",kh=3,kw=3,n_out=256,dh=1,
                dw=1)
pool3=mpool_op(conv3_3,name="pool3",kh=2,kw=2,dh=2,dw=2)


conv4_1=conv_op(pool3,name="conv4_1",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
conv4_2=conv_op(conv4_1,name="conv4_2",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
conv4_3=conv_op(conv4_2,name="conv4_3",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
pool4=mpool_op(conv4_3,name="pool4",kh=2,kw=2,dh=2,dw=2)


conv5_1=conv_op(pool4,name="conv5_1",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
conv5_2=conv_op(conv5_1,name="conv5_2",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
conv5_3=conv_op(conv5_2,name="conv5_3",kh=3,kw=3,n_out=512,dh=1,
                dw=1)
pool5=mpool_op(conv5_3,name="pool5",kh=2,kw=2,dw=2,dh=2)


shp=pool5.get_shape()
flattened_shape=shp[1].value*shp[2].value*shp[3].value
resh1=tf.reshape(pool5,[-1,flattened_shape],name="resh1")

fc6=fc_op(resh1,name="fc6",n_out=4096)
fc6_drop=tf.nn.dropout(fc6,keep_prob,name="fc6_drop")

fc7=fc_op(fc6_drop,name="fc7",n_out=4096)
fc7_drop=tf.nn.dropout(fc7,keep_prob,name="fc7_drop")

fc8=fc_op(fc7_drop,name="fc8",n_out=1000)
prediction=fc_end_layer(fc8,1000,1,activation_function=None)

return prediction

#---------构造损失节点:loss 优化节点:optimizer 训练节点:train---------------------------------------

x=tf.placeholder(tf.float32,[None,28,28,3])
y=tf.placeholder(tf.float32,[None,1])

prediction = inference_op(x,0.5)

loss = tf.reduce_mean(tf.square(y - prediction))
optimizer = tf.train.GradientDescentOptimizer(0.5)

train = optimizer.minimize(loss)

#--------运行网络--------------------------------------------------

IMG_W = 28
IMG_H = 28
BATCH_SIZE = 4
CAPACITY = 24
MAX_STEP = 100
learning_rate = 0.0005
train_dir = 'D:\VGGNet-16\fatigue_cycle_picture'

pictures_list,numbers_list = get_files(train_dir)
image_batch,label_batch = get_batch(pictures_list,numbers_list,IMG_W,IMG_H,BATCH_SIZE,CAPACITY)
#label_batch=tf.to_float(label_batch)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(100):
print(i)

print(sess.run(image_batch))
sess.run(train,feed_dict={x:image_batch.eval(session=sess),y:label_batch.eval(session=sess)})

sess.close()

1个回答

通过summary添加日志输出,放到tensorboard里面看下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐