Alexnet分类问题,程序输入不匹配

本文通过使用AlexNet网络实现了一次二分类任务的实际操作案例,输入的图片尺寸为227x227彩色图像。文章详细介绍了从数据加载到模型训练及评估的全过程,并附上了完整的Python代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Alexnet网络做一个二分类问题,输入的图片也是227乘227的彩图。

遇到了如下的问题,求大家帮我看看是什么问题。


from __future__ import division, print_function, absolute_import
import os
import random
from PIL import Image 
import numpy as np
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_2d, max_pool_2d, upsample_2d
from tflearn.layers.normalization import local_response_normalization
from tflearn.layers.estimator import regression

#import tflearn.datasets.oxflower17 as oxflower17
#X, Y = oxflower17.load_data(one_hot=True, resize_pics=(227, 227))
np.random.seed(170)
def load_data(DataDir):  
    data = np.empty((170,227,227,3),dtype="float32")  #37是图片个数,800*800为图片大小,3是图片通道数
    label = np.empty((170,),dtype="int")  
    imgs = os.listdir(DataDir)  
    num = len(imgs)  
    for i in range(num):  
        img = Image.open(DataDir+imgs[i])  
        arr = np.asarray(img,dtype="float32")  
        data[i,:,:,:] = arr  
        if i<53:  
            label[i] = int(0)  #o是无缺陷类,共170张图,第0-52张为无缺陷类。
        else:  
            label[i] = int(1)  
    data /= np.max(data)  #这两行是数据归一化,不用管
    data -= np.mean(data)  
    return data,label  


data,label=load_data('C:/Users/Administrator/Desktop/cnntest/picture/')
index = [i for i in range(len(data))]  
random.shuffle(index)  #之前做标签时,数据是按类排的,这边直接打乱顺序。所以标签还是一一对应的。
data = data[index]  
label = label[index]  
(TrainData,TestData) = (data[0:119],data[120:])  #traindata包括了两类数据,不用分开来输入。7:3训练集:预测集
(TrainLabel,TestLabel) = (label[0:119],label[120:]) 



# Building 'AlexNet'
network = input_data(shape=[None, 227, 227, 3])
network = conv_2d(network, 96, 11, strides=4, activation='relu') #96为滤波器个数,11为滤波器大小

network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)

network = conv_2d(network, 256, 5, activation='relu', group=2)

network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)

network = conv_2d(network, 384, 3, activation='relu')

network = conv_2d(network, 384, 3, activation='relu')

network = conv_2d(network, 256, 3, activation='relu')

network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)

network = upsample_2d(network,2,name='upsample')

network = fully_connected(network, 4096, activation='relu')
network = dropout(network, 0.5)

network = fully_connected(network, 4096, activation='relu')
network = dropout(network, 0.5)
#net = tflearn.global_avg_pool(net)
network = fully_connected(network, 2, activation='softmax')
network = regression(network, optimizer='momentum',
                     loss='categorical_crossentropy',
                     learning_rate=0.001)

# Training
print('Training ------------')
model = tflearn.DNN(network, checkpoint_path='model_alexnet', max_checkpoints=1, tensorboard_verbose=2)
model.fit(TrainData,TrainLabel, n_epoch=5, validation_set=0.1, shuffle=True,
          show_metric=True, batch_size=64, snapshot_step=200,
          snapshot_epoch=False, run_id='CNNPOTATO')

model.save('CNNPOTATO.model')
model.load('CNNPOTATO.model')

print('\nTesting ------------')
# Evaluate the model with the metrics we defined earlier
loss, accuracy = model.evaluate(TestData, TestLabel)
print('\ntest loss: ', loss)
print('\ntest accuracy: ', accuracy)
#print(model.predict([Y[1]]))


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值