线性模型
tensorflow
构建模型
# 构建一个线性模型
d = tf.Variable(np.random.rand(1)) # 截距
k = tf.Variable(np.random.rand(1)) #斜率
y = k*x_data + d # 映射函数
网络设置
# 二次代价函数
loss = tf.losses.mean_squared_error(y_data, y)
# 定义一个梯度下降法优化器
optimizer = tf.train.GradientDescentOptimizer(0.4) # 经测试0.3~0.7之间较合适
# 最小化代价函数
train = optimizer.minimize(loss)
# 初始化变量
init= tf.global_variables_initializer()
训练
with tf.Session() as sess:
sess.run(init)
for i in range(100):
sess.run(train)
if i%20==0:
print(i,sess.run([k,d]))
y_pred = sess.run(y)
keras
构建模型
# 构建序列模型
model = Sequential()
# 添加一个全连接层
model.add(Dense(units=1,input_dim=1))
模型参数
# 模型参数
model.compile(optimizer='sgd',loss='mse')
训练
for step in range(3001):
cost = model.train_on_batch(x_data,y_data)
# 每500个batch打印一次cost
if step%500==0:
print('cost:',cost)
# 打印权值和偏置
W,b = model.layers[0].get_weights()
print('W:',W,'b:',b)
y_pred = model.predict(x_data)
非线性模型
tensorflow
构建模型
# 定义两个placeholder
x = tf.placeholder(tf.float32,[None,1]) # n行1列
y = tf.placeholder(tf.float32,[None,1])
网络设置
# 神经网络结构:1-30-1
w1 = tf.Variable(tf.random_normal([1,30])) # 权重矩阵
b1 = tf.Variable(tf.zeros([30])) # 偏置矩阵
wx_plus_b_1 = tf.matmul(x,w1) + b1
l1 = tf.nn.tanh(wx_plus_b_1) # 激活函数 可以尝试tf.nn.relu 但是要调参 relu使用比较复杂的模型
w2 = tf.Variable(tf.random_normal([30,30])) # 权重矩阵
b2 = tf.Variable(tf.zeros([30])) # 偏置矩阵 ********
wx_plus_b_2 = tf.matmul(l1,w2) + b2
l2 = tf.nn.tanh(wx_plus_b_2) # 激活函数 可以尝试tf.nn.relu 但是要调参 relu使用比较复杂的模型
# 隐藏层到输出层
w3 = tf.Variable(tf.random_normal([30,1]))
b3 = tf.Variable(tf.zeros([1]))
wx_plus_b_3 = tf.matmul(l2,w3) + b3
prediction = tf.nn.tanh(wx_plus_b_3)
参数设置
# 二次代价函数
loss = tf.losses.mean_squared_error(y,prediction)
# 使用梯度下降法最小化loss
train = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
训练
with tf.Session() as sess:
# 变量初始化
sess.run(tf.global_variables_initializer())
# 训练
for _ in range(5500):
sess.run(train,feed_dict={x:x_data,y:y_data})
# 获得预测值
prediction_value = sess.run(prediction,feed_dict={x:x_data})
keras
构建模型
# 构建序列模型
model = Sequential()
网络设置
# 添加一个全连接层
model.add(Dense(units=10,input_dim=1,activation='tanh')) # activation很重要
#中间层
model.add(Dense(units=100,input_dim=10,activation='tanh'))
# 最后一层
model.add(Dense(units=1,activation='tanh'))
参数设置
sgd = SGD(lr=0.2) # 很重要
# 模型参数
model.compile(optimizer=sgd,loss='mse')
训练
for step in range(3001):
cost = model.train_on_batch(x_data,y_data)
# 每500个batch打印一次cost
if step%500==0:
print('cost:',cost)
y_pred = model.predict(x_data
总结
- keras比tensorflow代码少了非常多,特别是网络结构搭建和参数设置
- keras比tensorflow慢约一倍