手写数字识别多层网络

当中间多一层时,如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,则要改变损失函数

自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/15046755.html