tf-2. mnist 使用卷积方式来处理

源:http://www.tensorfly.cn/tfdoc/tutorials/mnist_pros.html

数据集:http://www.tensorfly.cn/tfdoc/tutorials/mnist_download.html

import tensorflow as tf

import input_data


minist = input_data.read_data_sets("MNIST_data/",one_hot=True)


        #y = tf.nn.softmax(wx+b)


x=tf.placeholder("float",[None,28*28])
x_=tf.reshape(x,[-1,28,28,1])


def conv(x):
#卷积1
    with tf.variable_scope('conv1'):
        w=tf.get_variable('weight',[5,5,1,32],initializer = tf.truncated_normal_initializer(stddev=0.1))
        b=tf.get_variable('bias',[32],initializer = tf.truncated_normal_initializer(stddev=0.1))
        conv1 = tf.nn.conv2d(x,w,strides=[1,1,1,1],padding="SAME")
        badd = tf.nn.bias_add(conv1,b)
        relu1 = tf.nn.relu(badd)
    with tf.name_scope("pool1"):
        pool1 = tf.nn.max_pool(relu1,[1,2,2,1],strides=[1,2,2,1],padding="SAME")


#卷积2
    with tf.variable_scope('conv2'):
        w=tf.get_variable('weight',[5,5,32,64],initializer = tf.truncated_normal_initializer(stddev=0.1)) #名不同
        b=tf.get_variable('bias',[64],initializer = tf.truncated_normal_initializer(stddev=0.1))
        conv2 = tf.nn.conv2d(pool1,w,strides=[1,1,1,1],padding="SAME")
        badd = tf.nn.bias_add(conv2,b)
        relu2 = tf.nn.relu(badd)
    with tf.name_scope("pool2"):
        pool2 = tf.nn.max_pool(relu2,[1,2,2,1],strides=[1,2,2,1],padding="SAME")


#展平
    t=tf.reshape(pool2,[-1,7*7*64])


    return t




#全连接层1
w=tf.Variable(tf.truncated_normal([7*7*64,1024],stddev=0.1))
b=tf.Variable(tf.truncated_normal(stddev=0.1,shape=[1024]))


x_flat = conv(x_)
relu1 = tf.nn.relu(tf.matmul(x_flat,w)+b)




#drop
keep_prob= tf.placeholder("float")
h_drop = tf.nn.dropout(relu1,keep_prob)


#全连接层2
w2=tf.Variable(tf.truncated_normal([1024,10],stddev = 0.1))
b2=tf.Variable(tf.truncated_normal(stddev=0.1,shape=[10]))


y=tf.nn.softmax(tf.matmul(h_drop,w2)+b2 ) #** w,b


y_=tf.placeholder("float",[None,10])


loss = -tf.reduce_sum(y_*tf.log(y))
train = tf.train.GradientDescentOptimizer(1e-4).minimize(loss) #学习率不同,导致错
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,"float"))




init = tf.global_variables_initializer()


with tf.Session() as sess:
    sess.run(init)
    for i in range(20000):
        batch_xs,batch_ys = minist.train.next_batch(50)
        sess.run(train,feed_dict={x:batch_xs,y_:batch_ys,keep_prob: 0.5})
        if i%100 == 0:
            train_accuracy = accuracy.eval(feed_dict={ x:batch_xs, y_: batch_ys, keep_prob: 1.0})
            print ("step %d, training accuracy %g"%(i, train_accuracy))


        
    correct_predict = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
    accuracy=tf.reduce_mean(tf.cast(correct_predict,"float"))
    print(sess.run(accuracy,feed_dict={x:minist.test.images,y_:minist.test.labels}))


主要流程如下

图片输入->[卷积,池化]->[卷积,池化】->全连接层1024个隐藏结点->全连接层10个结点->softmax输出

卷积层:提取图片的特征,如下图,随着卷积层的进行,图像的特征,即下图的深度不断的加深

池化层:对卷积后的数据量进行缩小,如下图:池化层后,图像规格减半

drop:正则化,原于处理过拟合



        
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个保存tf.keras.datasets.mnist训练好的模型的示例代码: ``` import tensorflow as tf from tensorflow import keras # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 数据预处理 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 # 构建模型 model = keras.Sequential([ keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)), keras.layers.MaxPooling2D(pool_size=(2, 2)), keras.layers.Flatten(), keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test)) # 保存模型 model.save('mnist_model.h5') ``` 在这个例子中,我们使用tf.keras构建一个简单的卷积神经网络模型,并使用MNIST数据集进行训练。在训练完成后,我们使用model.save()方法将模型保存到磁盘上的mnist_model.h5文件中。您可以使用类似以下的代码加载已保存的模型: ``` from tensorflow import keras model = keras.models.load_model('mnist_model.h5') ``` ### 回答2: 要保存训练好的模型代码,我们可以使用tf.keras自带的保存和加载模型的功能。具体操作如下: 1. 导入所需的库 ```python import tensorflow as tf from tensorflow import keras ``` 2. 加载mnist数据集 ```python (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() ``` 3. 数据预处理 ```python x_train = x_train / 255.0 x_test = x_test / 255.0 ``` 4. 构建模型 ```python model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 5. 训练模型 ```python model.fit(x_train, y_train, epochs=5) ``` 6. 保存模型 ```python model.save('mnist_model.h5') ``` 以上代码将保存训练好的模型为一个名为"mnist_model.h5"的文件。 如果要加载保存的模型,可以使用以下代码: ```python loaded_model = keras.models.load_model('mnist_model.h5') ``` 通过这样保存和加载模型的方式,我们可以方便地保存和复用训练好的模型代码。 ### 回答3: 要保存tf.keras.datasets.mnist训练好的模型,我们可以使用以下代码: ```python import tensorflow as tf from tensorflow import keras # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() # 数据预处理 x_train = x_train / 255.0 x_test = x_test / 255.0 # 构建模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=5) # 保存模型 model.save('mnist_model.h5') ``` 以上代码首先加载了MNIST数据集,然后对数据进行预处理,构建了一个包含两个Dense层的Sequential模型,并对模型进行了编译。接着,通过调用`fit`方法来训练模型,训练5个epochs。最后,使用`save`方法将训练好的模型保存为`mnist_model.h5`文件。 这样就完成了将tf.keras.datasets.mnist训练好的模型保存的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值