Keras官方Example里Mnist-cnn的调试运行

问题:老板让测试运行Keras官网里的Mnist-cnn.py,结果从下载数据就是一路坑……

 

当前环境:Ubuntu12.04、python2.7、Keras 1.1.1(不知道这个版本号对不对,在启动文件里查到的)

 

按遇到问题的先后逐个出解决方案:

1、load_data数据,下载老是报Errno 104 Connection reset by peer

解决:

  ①因为无论是否FQ下载都很慢,下载数据到本地并解压出pkl文件,绝对路径中不能有中文,

  ②重写数据加载函数,后面上代码,

 

2、运行代码时报错:

OverflowError: Range exceeds valid bounds
从异常跑出的栈里看是numpy的random函数有越界,
解决:有两种方法,就试了种简单的,另一种没试,
文件前面初始化设置:
from keras import backend
backend.set_image_dim_ordering('th')
查看具体解释。


下面是修改后的代码:如有问题还望能评论指出,谢谢,至少现在是能跑的,
import gzip

from six.moves import cPickle

from keras import backend
backend.set_image_dim_ordering('th')

batch_size = 128
nb_classes = 10
nb_epoch = 12

# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3

def load_data(path='mnist.pkl.gz'):
#    path = get_file(path, origin='https://s3.amazonaws.com/img-datasets/mnist.pkl.gz')
    path = r'/home/wh/mnist.pkl'

    if path.endswith('.gz'):
        f = gzip.open(path, 'rb')
    else:
        f = open(path, 'rb')
    f = open(path, 'rb')   
    data = cPickle.load(f)
f.close() return data # (X_train, y_train), (X_test, y_test) # the data, shuffled and split between train and test sets #(X_train, y_train), (X_test, y_test) = mnist.load_data() (X_train, y_train), (X_test, y_test) = load_data()

  

 

时间戳:2016-12-5 20:50:13

  

  

 

转载于:https://www.cnblogs.com/1394htw/p/6135456.html

好的,我可以帮您实现一个基于CNN的手写数字识别器。我们可以使用Python编程语言和深度学习框架TensorFlow来构建这个模型。 首先,我们需要导入必要的库: ```python import tensorflow as tf from tensorflow.keras import datasets, layers, models import matplotlib.pyplot as plt ``` 然后,我们可以加载MNIST数据集并将其划分为训练集和测试集: ```python (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() ``` 接下来,我们可以对图像数据进行预处理,将像素值缩放到0到1之间,并将图像数据从3D张量转换为4D张量: ```python train_images = train_images / 255.0 test_images = test_images / 255.0 train_images = train_images.reshape((train_images.shape[0], 28, 28, 1)) test_images = test_images.reshape((test_images.shape[0], 28, 28, 1)) ``` 然后,我们可以构建CNN模型。这我们使用两个卷积层,每个卷积层后面跟着一个池化层,以及一个全连接层和一个输出层: ```python model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10)) ``` 最后,我们可以编译模型并训练它: ```python model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) ``` 训练完成后,我们可以使用测试集评估模型的性能: ```python test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print("Test accuracy:", test_acc) ``` 最后,我们可以使用模型来预测手写数字图像: ```python import numpy as np # Load a sample image and preprocess it image = plt.imread("example.png") image = np.mean(image, axis=2) image = np.expand_dims(image, axis=0) image = np.expand_dims(image, axis=-1) image = image / 255.0 # Make a prediction prediction = model.predict(image) digit = np.argmax(prediction) print("The predicted digit is:", digit) ``` 这样,我们就成功地构建了一个基于CNN的手写数字识别器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值