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