猫狗大战之简单逻辑回归

根据吴恩达深度学习第二周的猫狗逻辑回归数据,进行train,发现准确度只有50%左右,可以说是非常之不好了。一开始以为是我网络参数的问题,但是应用

https://blog.csdn.net/u013733326/article/details/79827273这里面的代码,再变成我自己的数据之后,发现原来人家的准确度是这么多

而我自己的准确度是

现在看来,可能是数据本身没有预处理,只是简单的进行resize和0~1化了,所以不好识别。这样看来上篇博客的猫狗大战之cnn也是用的此数据,效果不好大概也是这个原因了吧。不过上篇可以将features由64-》128来稍稍改善,这里就不行了。

下面附上代码,两个都可以跑:

1.自己之前写的,但是由于准确度只有50%,找了半天不知道啥原因,以为参数差点崩溃

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 11 09:20:19 2020

@author: sun
"""
#遵循吴恩达老的时风格
#涉及到图片到tf的读取,以及resize图像
import os
from PIL import Image
import cv2
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import tensorflow.examples.tutorials.mnist.input_data as input_data


#读取文件列表
def get_files(file_path):#总文件夹 train/test  返回所有图片名字及label
    class_train=[]
    label_train=[]
    #for train_class in os.listdir(file_path):#包含猫0或者狗1 文件夹名字
    for pic_name in os.listdir(file_path):
        class_train.append(file_path+'/'+pic_name)
        if 'cat' in pic_name:
            label_train.append(0)
        else:
            label_train.append(1)
    temp=np.array([class_train,label_train])#2*pic_number
    temp=temp.transpose()#pic_number*2
    np.random.shuffle(temp)#为了更好的shuffle
   
    image_list=list(temp[:,0])
    label_list=list(temp[:,1])
   
    return image_list, label_list
#按照文件名字去读取图片、改变size、变成规整的batch数据。。。。
def get(image,label,batch_size,i):
    img_names=image[batch_size*i:batch_size*(i+1)]
    imgs=np.zeros((batch_size,(28*28)),dtype=np.uint8)
    labels=np.zeros((batch_size,1),dtype=np.uint8)
    for img_idx in range(len(img_names)):
        img=cv2.imread(img_names[img_idx])
        #img = color.rgb2gray(img)
        img=cv2.resize(img[:,:,0],(1, 28*28)).flatten()
        img=img/255
        #print(img)
        imgs[img_idx]=img    
        labels[img_idx][0]=label[img_idx]
        #print(labels)
    return imgs,labels
#返回将是Tensor
def get_batch(image,label,resize_w,resize_h,batch_size,capacity):
    
    image=tf.cast(image,tf.string)#<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=499x375 at 0x24B9AFD0CC0>
    label=tf.cast(label,tf.int64)
    queue=tf.train.slice_input_producer([image,label])#是一个tensor生成器,作用是按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。
    label=queue[1]
    image=tf.read_file(queue[0])
    
    # 将图像使用JPEG的格式解码从而得到图像对应的三维矩阵。Tensorflow还提供了 tf.image.decode_png函数对png格式的图像进行编码。
    # 解码之后的结果为一个张量, 在使用他的取值之前需要明确调用运行的过程。
    # Decode a JPEG-encoded image to a uint8 tensor 所以这里的 image_data 已经是一个tsnsor
    #图像-》tensor 3维矩阵
    image=tf.image.decode_jpeg(image,channels=1)

    image=tf.image.resize_image_with_crop_or_pad(image,resize_w,resize_h)
    image=tf.image.per_image_standardization(image)
    
    image_batch,label_
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值