Python 美国有线电视新闻网关于时装MNIST数据集

Python 美国有线电视新闻网关于时装MNIST数据集,python,machine-learning,keras,Python,Machine Learning,Keras,我正在使用fashion MNIST数据集来尝试解决这个问题。我正在使用链接中的数据: 培训: 培训集标签: 测试集映像 测试集标签 我使用以下代码打开数据集: def load_mnist(路径,kind='train'): 导入操作系统 导入gzip 将numpy作为np导入 “”“从'path'加载MNIST数据” labels\u path=os.path.join(路径, “%s-labels-idx1-ubyte.gz” %(种类) images\u path=os.path

我正在使用fashion MNIST数据集来尝试解决这个问题。我正在使用链接中的数据:

培训:

培训集标签:

测试集映像

测试集标签

我使用以下代码打开数据集:

def load_mnist(路径,kind='train'):
导入操作系统
导入gzip
将numpy作为np导入
“”“从'path'加载MNIST数据”
labels\u path=os.path.join(路径,
“%s-labels-idx1-ubyte.gz”
%(种类)
images\u path=os.path.join(路径,
“%s-images-idx3-ubyte.gz”
%(种类)
将gzip.open(标签_path,'rb')作为lbpath:
labels=np.frombuffer(lbpath.read(),dtype=np.uint8,
偏移量=8)
使用gzip.open(images_path,'rb')作为imgpath:
images=np.frombuffer(imgpath.read(),dtype=np.uint8,
偏移=16)。重塑(透镜(标签),784)
返回图像、标签
标签=[“T恤/上衣”、“裤子”、“套头衫”、“连衣裙”、“外套”、“凉鞋”、“衬衫”,
“运动鞋”、“包”、“踝靴”]
数据_dir='。/'
X\u train,y\u train=load\u mnist('D:\book',kind='train'))
X\u测试,y\u测试=负载列表('D:\book',kind='t10k')
X_train=X_train.astype(np.float32)/256.0
X_test=X_test.astype(np.float32)/256.0
我正在尝试用以下架构构建卷积神经网络:

  • 卷积层,32个滤波器,尺寸为3x3
  • ReLU激活函数
  • 2x2最大池
  • 卷积层,64个滤波器,尺寸为3x3
  • ReLU激活函数
  • 2x2最大池
  • 具有512个单元和ReLU激活功能的全连接层
  • 输出层的Softmax激活层 对于使用SGD优化器的100个时代
我的代码是:

X_train=X_train.重塑([60000,28,28,1])
X_train=X_train.astype('float32')/255.0
X_测试=X_测试。重塑([10000,28,28,1])
X_test=X_test.astype('float32')/255.0
模型=顺序()
添加(layers.Conv2D(32,(3,3),activation='relu',input_shape=[28,28,1]))
添加(layers.MaxPooling2D((2,2)))
添加(layers.Conv2D(64,(3,3),activation='relu'))
添加(layers.MaxPooling2D((2,2)))
model.add(layers.flatte())
model.add(layers.Dense(512,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))
model.summary()
y_train=keras.utils.np_utils.to_category(y_train)
y_检验=keras.utils.np_utils.to_分类(y_检验)
compile(优化器='sgd',loss='classifical_crossentropy',metrics=['accurity'])
模型拟合(X_序列,y_序列,历元=100)

但执行起来要花很多时间。每一个时代大约30分钟。我认为我的代码有问题。有人能帮我弄清楚吗?

我想强调几点:

  • 加载mnist数据集后,查看代码中的以下行:

    X_train = X_train.astype(np.float32) / 256.0
    X_test = X_test.astype(np.float32) / 256.0 
    
    为什么要除以
    256.0
    ?图像中的像素数据范围为0-255。因此,您应该将其除以
    255.0
    ,将其标准化为0-1范围

  • 加载后对数据进行一次规范化后,您将再次对其进行规范化。检查以下代码:

    X_train = X_train.reshape([60000, 28, 28, 1])
    X_train = X_train.astype('float32') / 255.0
    X_test = X_test.reshape([10000, 28, 28, 1])
    X_test = X_test.astype('float32') / 255.0
    
    在这里,重塑后,您将再次对其进行规格化。这是没有必要的。多次规范化数据可能会在训练网络时减慢收敛速度

  • 您没有在
    model.fit
    函数中传递
    batch\u size
    值。根据文件

    如果未指定,批次大小将默认为32

    这可能是它需要更多时间执行的原因。尝试将批处理大小增加到100、200等,然后检查执行时间

  • 如果可能的话,您是在cpu而不是gpu上训练您的模型<代码>60000x28x28培训数据不是一个小数据集

    • 我想强调几点:

      • 加载mnist数据集后,查看代码中的以下行:

        X_train = X_train.astype(np.float32) / 256.0
        X_test = X_test.astype(np.float32) / 256.0 
        
        为什么要除以
        256.0
        ?图像中的像素数据范围为0-255。因此,您应该将其除以
        255.0
        ,将其标准化为0-1范围

      • 加载后对数据进行一次规范化后,您将再次对其进行规范化。检查以下代码:

        X_train = X_train.reshape([60000, 28, 28, 1])
        X_train = X_train.astype('float32') / 255.0
        X_test = X_test.reshape([10000, 28, 28, 1])
        X_test = X_test.astype('float32') / 255.0
        
        在这里,重塑后,您将再次对其进行规格化。这是没有必要的。多次规范化数据可能会在训练网络时减慢收敛速度

      • 您没有在
        model.fit
        函数中传递
        batch\u size
        值。根据文件

        如果未指定,批次大小将默认为32

        这可能是它需要更多时间执行的原因。尝试将批处理大小增加到100、200等,然后检查执行时间

      • 如果可能的话,您是在cpu而不是gpu上训练您的模型<代码>60000x28x28培训数据不是一个小数据集