使用自己的图片训练CNN分类器-TensorFlow

在看过吴恩达CNN 前两周的课,并且完成了课后作业后,对CNN的实现有了具象的了解。整体的实现过程大概分为以下几部分:

1. 数据准备。我将数据组织成多维数组的形式,关于tfrecord是什么还未去了解,这里就按照cousera课后作业的形式,模仿着来实现。

P.S. 自己的图片可能比较大,也可能大小不一,因此,将图片做适当处理,整理成 input [ m, n_H, n_W, n_C ]  。m表示样本总数,n_H, n_W表示图片的高和宽, n_C表示图片的通道数,彩色RGB通道数是3,灰度图则是1(这里的1不确定该如何理解:是三个通道具有相同的值?还是一个通道有值,其他两个通道值都是0?)。调整图片大小的程序如下:

        image_raw_data = tf.gfile.GFile(image_list[i],'r').read() 
        img_data = tf.image.decode_jpeg(image_raw_data)  
        
        #第一个参数为原始图像,第二个参数为图像大小,第三个参数给出了指定的算法  
        resized = tf.image.resize_images(img_data, [64,64],method=0)  
        resized = np.asarray(resized.eval(),dtype='uint8')

2. 如过你的图片是分好类的,那么读取进来后需要打乱顺序,另外,标签与图片要一一对应。

    temp = np.array([class_train,label_train])  # 2*140
    temp = temp.transpose()  # 140*2
    #打乱顺序
    np.random.shuffle(temp)
    #第一列是image,第二列是label
    image_list = list(temp[:,0])
    label_list = list(temp[:,1])
或者

    permutation = list(np.random.permutation(m))   #生成一个 从0到m打乱的序列
    shuffled_X = X[permutation,:,:,:] 
    shuffled_Y = Y[permutation,:]
3. 准备好数据,划分好训练集和测试集,归一化处理。此时可以打印shape,检查是否是我们需要的维度

    X_train = X_train/255.
    X_test = X_test/255.
    print ("number of training examples = " + str(X_train.shape[0]))
    print ("number of test examples = " + str(X_test.shape[0]))
    print ("X_train shape: " + str(X_train.shape))
    print ("Y_train shape: " + str(Y_train.shape))
    print ("X_test shape: " + str(X_test.shape))
    print ("Y_test shape: " + str(Y_test.shape))
4. 以下便是仿照Andrew的课后作业来实现CNN的流程,其中需要的根据自己的情况进行修改的地方有:输出向量的维数(即分类数)以及算法的各参数。比如minibatch_size

要根据你的训练集大小来设置,样本数不多的话,size也适当取小一点,另外如果size很小,可适当增加学习的代数。最后代价的曲线如下:

完整代码请移步GitHub  点击打开链接

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值