寻找最小误差(loss) tensorflow

import os
import cv2
import numpy as np
import tensorflow as tf

h_pool2_flat = 12288
n_classes = 1
# 设置路径
data_home = 'data/imgdata/'

# 标签映射字典
image_to_label = {}
with open('data/label.txt', 'r') as fr:
    lines = fr.readlines()
    for line in lines:
        line = line.strip()
        key, value = line.split(' ')
        image_to_label[key] = value

# 构造训练集
X_train = []
y_train = []
for jpg in os.listdir(data_home):
    image = cv2.imread(data_home + jpg)
    x = cv2.resize(image, (64, 64))
    X_train.append(x)
    y = image_to_label[jpg]
    y_train.append(y)

X_train = np.array(X_train).reshape((1000, -1))
y_train = np.array(y_train).reshape((-1, 1))


# print(X_train.shape)
# print(y_train)

def get_biases(shape):
    '''
    函数的偏置定义。tf.get_variable(name,shape,dtype,initializer)
    参数
        1.name:“biases”
        2.shape:[size],即[输出维度]
        3.dtype:tf.float32
        4.initializer:初始化方式initial,我们选择常量初始化
            语法:tf.constant_initializer(value)
            参数:
            1)value:常数。0.1

    :param shape: 偏置输出维度
    :return: 偏置变量
    '''
    # TODO:1.使用tf.constant_initializer(0.1)函数定义初始化方式
    initial = tf.constant_initializer(0.1)
    # TODO:2.使用tf.get_variable函数定义偏置变量
    biases = tf.get_variable("biases",
                             shape=shape,
                             dtype=tf.float32,
                             initializer=initial)
    return biases


def get_weights(shape):
    '''
    定义参数,卷积核/权值
    语法:tf.get_variable(name,shape,dtype,initializer)
    参数:
        1.name:“weights”
        2.shape:根据不同的变量,输入不同的shape
        3.dtype:tf.float32
        4.initializer:初始化方式initial,我们选择初始化方式为截断的正太分布
            语法:tf.truncated_normal_initializer(stddev,dtype)
            参数:
                1)stedev:要生成的随机值的标准偏差。可设置stedev=0.005
                2) dtype:数据类型。只支持浮点类型 可设置dtype=tf.float32。

    :param shape:参数shape
    :return: 变量参数
    '''
    # TODO:1.使用tf.truncated_normal_initializer定义变量的初始化方式
    initial = tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32)
    # TODO:2.使用tf.get_variable函数定义变量,
    weights = tf.get_variable("weights",
                              shape=shape,
                              dtype=tf.float32,
                              initializer=initial)
    return weights


# 一层全连接
def add_fc_layer(inputs, insize, outsize, activation_function=None):
    '''
    添加全连接层
    1.定义权值weights
    2.定义偏置bias
    3.完成全连接操作:inputs*weights+bias
    4.如果没有激活函数,返回softmax结果
      如果有激活函数则,返回activation_function结果

    :param inputs: 输入图像
    :param insize: 输入维度
    :param outsize: 输出维度
    :param activation_function: 激活函数
    :return: 计算结果
    '''
    # TODO:1.调用get_weights()获取权值
    weights = get_weights([insize, outsize])
    # TODO:2.调用get_biases()获取偏置
    bias = get_biases([outsize])
    # TODO:3.使用tf.matmul完成inputs和weights乘法运算;使用+完成与bias的加法运算
    wx_plus_b = tf.matmul(inputs, weights) + bias
    # TODO:4.如果激活函数None,返回tf.nn.softmax结果,否则返回activation_function结果
    if activation_function == None:
        outputs = tf.nn.softmax(wx_plus_b)
    else:
        outputs = activation_function(wx_plus_b)
    return outputs


# 全部模型

def inference(inputs):
    # TODO:1.调用add_fc_layer完成全连接操作1
    with tf.variable_scope("fc1", reuse=tf.AUTO_REUSE) as scope:
        # h_pool2_flat = tf.reshape(inputs, shape=[-1, 12288])
        fc1 = add_fc_layer(inputs, h_pool2_flat, 128, tf.nn.relu)
    # TODO:2.调用add_fc_layer完成全连接操作2
    with tf.variable_scope("fc2", reuse=tf.AUTO_REUSE) as scope:
        fc2 = add_fc_layer(fc1, 128, 64, tf.nn.tanh)
    # TODO:3.调用add_fc_layer完成全连接操作3
    with tf.variable_scope("fc3", reuse=tf.AUTO_REUSE) as scope:
        fc3 = add_fc_layer(fc2, 64, 32, tf.nn.sigmoid)
        # TODO:4.调用Dropout激活概率为0.5
        fc3_drop = tf.nn.dropout(fc3, 0.5)

    # TODO:5.调用add_fc_layer完成全连接操作4
    with tf.variable_scope("fc4", reuse=tf.AUTO_REUSE) as scope:
        fc4 = add_fc_layer(fc3_drop, 32, n_classes, tf.nn.relu)
    return fc4


# 占位符
x_pl = tf.placeholder(tf.float32)
y_pl = tf.placeholder(tf.float32)

# 预测值
y_pred = inference(x_pl)

# 损失值、优化方法
k = (y_train - y_pred)
loss = tf.reduce_mean(tf.square(k))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(loss)

# 模型训练
saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(150000):
        _, train_loss = sess.run([train_op, loss], feed_dict={x_pl: X_train, y_pl: y_train})
        if epoch % 1000 == 0:
            print('epoch:{}, train_losses:{}'.format(epoch, train_loss))
    saver.save(sess, "model/model.ckpt", global_step=epoch)
    print('epoch:{}, save model'.format(epoch))

由于博客页面不能上传数据,so.............,数据下载地址:(73条消息) alldata.rar-Python文档类资源-CSDN文库https://download.csdn.net/download/qq_46906413/34467578

需要自取

如有侵权,请联系我删除 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值