手写数字识别多层网络

手写数字识别多层网络

 

 

当中间多一层时,如64个神经元,只需设两个w,两个b,依次类推,每增加一层增加一个w和一个b

w1 = tf.Variabel(tf.random.normal([784, 64], mean = 0.0, stddev = 1.0, dtype = tf.float32))
b1 = tf.Variable(tf.zeros[64], dtype = tf.float32)

w2 = tf.Variable(tf.random.normal([64, 10], mean = 0.0, stddev = 1.0, dtype = tf.float32))
b2 = tf.Variable(tf.zeros[10], dtype = tf.float32)

#将两个w,两个b分别合在一起,称为两个list
w = [w1, w2]
b = [b1, b2]

 

MODEL:

def model(x, y, w, b):
    x = tf.matmul(x, w[0]) + b[0]
    x = tf.nn.relu(x)
    return tf.nn.softmax(tf.matmul(x, w[1]) + b[1])

其它不用修改

 

使用keras序列模型建模

手写数字识别多层网络

 

#输入数据不需要cast,也不需要将一个图片拉成一维,标准化即可
train_images = train_images / 255.0
test_images = test_images / 255.0

创建模型:

#首先建立一个模型对象
model = tf.keras.models.Sequential()
#添加输入层,即平坦层
model.add(tf.keras.layers.Flatten(input_shape = (28, 28)))
#添加全连接层,设置神经元个数,初始化数值,激活函数
model.add(tf.keras.layers.Dense(units = 64, kernel_initializer = nolmal, activation = relu))
#添加最后一层,也设置为全连接层
model.add(tf.keras.layers.Dense(10, activation = softmax))
#使用.sumary()可查看模型各层情况
model.sumary()
#以上建模也可以一次性完成
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape = (28, 28)), tf.keras.layers.Dense(64, activation = relu), tf.keras.layers.Dense(10, activation = softmax)])

 

 

#定义训练模式,包括优化器、损失函数、评估方式
model.compile(optimizer = adam, loss = categorical_crossentropy, metrics = [accuracy])
#可以是=字符串 也可以直接一个对象

 

#模型训练
model_history = model.fit(train_image, train_labels_one_hot, validation_split = 0.2, epochs = 20, batch_size = 30, verbose = 2)

#标签集为one_hot后的,validation_split表示验证集的比例,剩下的为训练集
#verbose:训练过程的信息显示,0不输出,1输出进度条记录,2为每个epoch输出一行信息

 

手写数字识别多层网络

 

 

 

 

手写数字识别多层网络

 

 

手写数字识别多层网络

 

 

 

若不对标签进行one_hot,则要改变损失函数

手写数字识别多层网络

 

手写数字识别多层网络

上一篇:Go 四种数据类型转成string 字符串


下一篇:substr和mb_substr的区别