日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习(六)——优化器

發布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习(六)——优化器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

優化器是引導神經網絡更新參數的工具

鳶尾花分類的各種優化器實現(只有優化器,更新參數的部分不同)

1、SGD優化器

from sklearn import datasets import tensorflow as tf import numpy as np from matplotlib import pyplot as plt import time ##記錄時間 #步驟 ###準備數據 # 數據讀入 # 這個就是sgd優化器的案例 x_data = datasets.load_iris().data##加載數據集所有特征 y_data = datasets.load_iris().target##加載數據集所有標簽 # 數據集亂序 np.random.seed(116)#使用相同的seed,使輸入特征/標簽一一對應 np.random.shuffle(x_data) np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) # 生成訓練集和測試集 數據總量150,訓練:測試一般 4:1 x_train = x_data[:-30] y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] # 配成(輸入特征,標簽)對,每次讀入一小批(batch) train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) ##tf.data.Dataset.from_tensor_slices()的作用是使輸入標簽配對打包###搭建神經網絡 # 定義神經網絡中的可訓練參數 #生成神經網絡參數,4個輸入特征,所以輸入層為4個輸入節點,因為是分成3類,所以輸出層為3個神經元 w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1)) b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#學習率,不能太大或太小 train_loss_results = []#記錄每輪loss test_acc = []#將每輪的acc記錄下來 epoch = 500#循環次數 loss_all = 0#記錄每輪四個step的loss和 ###參數優化 # 嵌套循環迭代,with結構更新參數,顯示當前loss now_time = time.time()###記錄起始時間 for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神經網絡乘加運算y = tf.nn.softmax(y)#使y結果符合概率分布 與獨熱碼求lossy_ = tf.one_hot(y_train, depth = 3)#將標簽轉為獨熱碼,方便計算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方誤差損失函數loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])#實現梯度更新 w1 = w1 - lr * w1_grad b = b1 - lr * b_gradw1.assign_sub(lr * grads[0])#參數w1自更新b1.assign_sub(lr * grads[1])#參數b自更新#每個epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#記錄四個step的loss平均值loss_all = 0#歸0,為下一次做準備 ###測試效果 # 計算當前參數向后傳播的準確率,顯示當前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用訓練得到的參數進行預測y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即預測到的值#將pred轉換為y_test類型pred = tf.cast(pred, dtype=y_test.dtype)#將比較結果的布爾型轉換為int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分類正確則+1total_correct += int(correct)#累加,方便后面求正確率total_number += x_test.shape[0]#測試總樣本數acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------") total_time = time.time() - now_time print("total_time", total_time)##記錄訓練時間 ##繪制loss曲線方便觀察 plt.title("Loss Function Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('loss')#y軸變量名 plt.plot(train_loss_results, label="$Loss$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像##繪制acc曲線方便觀察 plt.title("Acc Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('Acc')#y軸變量名 plt.plot(test_acc, label="$Accuracy$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像

2、SGDM優化器

from sklearn import datasets import tensorflow as tf import numpy as np from matplotlib import pyplot as plt import time ##記錄時間 #步驟 ###準備數據 # 數據讀入 # 這個就是sgd優化器的案例 x_data = datasets.load_iris().data##加載數據集所有特征 y_data = datasets.load_iris().target##加載數據集所有標簽 # 數據集亂序 np.random.seed(116)#使用相同的seed,使輸入特征/標簽一一對應 np.random.shuffle(x_data) np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) # 生成訓練集和測試集 數據總量150,訓練:測試一般 4:1 x_train = x_data[:-30] y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] # 配成(輸入特征,標簽)對,每次讀入一小批(batch) train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) ##tf.data.Dataset.from_tensor_slices()的作用是使輸入標簽配對打包###搭建神經網絡 # 定義神經網絡中的可訓練參數 #生成神經網絡參數,4個輸入特征,所以輸入層為4個輸入節點,因為是分成3類,所以輸出層為3個神經元 w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1)) b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#學習率,不能太大或太小 train_loss_results = []#記錄每輪loss test_acc = []#將每輪的acc記錄下來 epoch = 500#循環次數 loss_all = 0#記錄每輪四個step的loss和 ###參數優化 # 嵌套循環迭代,with結構更新參數,顯示當前loss #######################################################m_w, m_b = 0, 0 beta = 0.9#0.9憑經驗設定 #######################################################now_time = time.time()###記錄起始時間 for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神經網絡乘加運算y = tf.nn.softmax(y)#使y結果符合概率分布 與獨熱碼求lossy_ = tf.one_hot(y_train, depth = 3)#將標簽轉為獨熱碼,方便計算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方誤差損失函數loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])#實現梯度更新 w1 = w1 - lr * w1_grad b = b1 - lr * b_grad################################################################sgd-momentun更新優化器m_w = beta * m_w + (1 - beta) * grads[0]m_b = beta * m_b + (1 - beta) * grads[1]################################################################w1.assign_sub(lr * m_w)#參數w1自更新b1.assign_sub(lr * m_b)#參數b自更新#每個epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#記錄四個step的loss平均值loss_all = 0#歸0,為下一次做準備 ###測試效果 # 計算當前參數向后傳播的準確率,顯示當前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用訓練得到的參數進行預測y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即預測到的值#將pred轉換為y_test類型pred = tf.cast(pred, dtype=y_test.dtype)#將比較結果的布爾型轉換為int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分類正確則+1total_correct += int(correct)#累加,方便后面求正確率total_number += x_test.shape[0]#測試總樣本數acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------") total_time = time.time() - now_time print("total_time", total_time)##記錄訓練時間 ##繪制loss曲線方便觀察 plt.title("Loss Function Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('loss')#y軸變量名 plt.plot(train_loss_results, label="$Loss$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像##繪制acc曲線方便觀察 plt.title("Acc Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('Acc')#y軸變量名 plt.plot(test_acc, label="$Accuracy$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像

3、Adagrad優化器

from sklearn import datasets import tensorflow as tf import numpy as np from matplotlib import pyplot as plt import time ##記錄時間 #步驟 ###準備數據 # 數據讀入 # 這個就是sgd優化器的案例 x_data = datasets.load_iris().data##加載數據集所有特征 y_data = datasets.load_iris().target##加載數據集所有標簽 # 數據集亂序 np.random.seed(116)#使用相同的seed,使輸入特征/標簽一一對應 np.random.shuffle(x_data) np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) # 生成訓練集和測試集 數據總量150,訓練:測試一般 4:1 x_train = x_data[:-30] y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] # 配成(輸入特征,標簽)對,每次讀入一小批(batch) train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) ##tf.data.Dataset.from_tensor_slices()的作用是使輸入標簽配對打包###搭建神經網絡 # 定義神經網絡中的可訓練參數 #生成神經網絡參數,4個輸入特征,所以輸入層為4個輸入節點,因為是分成3類,所以輸出層為3個神經元 w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1)) b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#學習率,不能太大或太小 train_loss_results = []#記錄每輪loss test_acc = []#將每輪的acc記錄下來 epoch = 500#循環次數 loss_all = 0#記錄每輪四個step的loss和 ###參數優化 # 嵌套循環迭代,with結構更新參數,顯示當前loss###################################################### v_w, v_b = 0, 0 ####################################################### now_time = time.time()###記錄起始時間 for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神經網絡乘加運算y = tf.nn.softmax(y)#使y結果符合概率分布 與獨熱碼求lossy_ = tf.one_hot(y_train, depth = 3)#將標簽轉為獨熱碼,方便計算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方誤差損失函數loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])#########################################################################adagradv_w += tf.square(grads[0])v_b += tf.square(grads[1])w1.assign_sub(lr * grads[0] / tf.sqrt(v_w))b1.assign_sub(lr * grads[1] / tf.sqrt(v_b))#######################################################################每個epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#記錄四個step的loss平均值loss_all = 0#歸0,為下一次做準備 ###測試效果 # 計算當前參數向后傳播的準確率,顯示當前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用訓練得到的參數進行預測y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即預測到的值#將pred轉換為y_test類型pred = tf.cast(pred, dtype=y_test.dtype)#將比較結果的布爾型轉換為int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分類正確則+1total_correct += int(correct)#累加,方便后面求正確率total_number += x_test.shape[0]#測試總樣本數acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------") total_time = time.time() - now_time print("total_time", total_time)##記錄訓練時間 ##繪制loss曲線方便觀察 plt.title("Loss Function Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('loss')#y軸變量名 plt.plot(train_loss_results, label="$Loss$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像##繪制acc曲線方便觀察 plt.title("Acc Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('Acc')#y軸變量名 plt.plot(test_acc, label="$Accuracy$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像

4、RMSProp優化器

from sklearn import datasets import tensorflow as tf import numpy as np from matplotlib import pyplot as plt import time ##記錄時間 #步驟 ###準備數據 # 數據讀入 # 這個就是sgd優化器的案例 x_data = datasets.load_iris().data##加載數據集所有特征 y_data = datasets.load_iris().target##加載數據集所有標簽 # 數據集亂序 np.random.seed(116)#使用相同的seed,使輸入特征/標簽一一對應 np.random.shuffle(x_data) np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) # 生成訓練集和測試集 數據總量150,訓練:測試一般 4:1 x_train = x_data[:-30] y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] # 配成(輸入特征,標簽)對,每次讀入一小批(batch) train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) ##tf.data.Dataset.from_tensor_slices()的作用是使輸入標簽配對打包###搭建神經網絡 # 定義神經網絡中的可訓練參數 #生成神經網絡參數,4個輸入特征,所以輸入層為4個輸入節點,因為是分成3類,所以輸出層為3個神經元 w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1)) b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#學習率,不能太大或太小 train_loss_results = []#記錄每輪loss test_acc = []#將每輪的acc記錄下來 epoch = 500#循環次數 loss_all = 0#記錄每輪四個step的loss和 ###參數優化 # 嵌套循環迭代,with結構更新參數,顯示當前loss ################################################# v_w, v_b = 0, 0 beta = 0.9 ################################################# now_time = time.time()###記錄起始時間 for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神經網絡乘加運算y = tf.nn.softmax(y)#使y結果符合概率分布 與獨熱碼求lossy_ = tf.one_hot(y_train, depth = 3)#將標簽轉為獨熱碼,方便計算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方誤差損失函數loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])#########################################################v_w = beta * v_w + (1 - beta) * tf.square(grads[0])v_b = beta * v_b + (1 - beta) * tf.square(grads[1])w1.assign_sub(lr * grads[0] / tf.sqrt(v_w))b1.assign_sub(lr * grads[1] / tf.sqrt(v_b))############################################################每個epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#記錄四個step的loss平均值loss_all = 0#歸0,為下一次做準備 ###測試效果 # 計算當前參數向后傳播的準確率,顯示當前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用訓練得到的參數進行預測y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即預測到的值#將pred轉換為y_test類型pred = tf.cast(pred, dtype=y_test.dtype)#將比較結果的布爾型轉換為int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分類正確則+1total_correct += int(correct)#累加,方便后面求正確率total_number += x_test.shape[0]#測試總樣本數acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------") total_time = time.time() - now_time print("total_time", total_time)##記錄訓練時間 ##繪制loss曲線方便觀察 plt.title("Loss Function Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('loss')#y軸變量名 plt.plot(train_loss_results, label="$Loss$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像##繪制acc曲線方便觀察 plt.title("Acc Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('Acc')#y軸變量名 plt.plot(test_acc, label="$Accuracy$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像

Adam優化器

from sklearn import datasets import tensorflow as tf import numpy as np from matplotlib import pyplot as plt import time ##記錄時間 #步驟 ###準備數據 # 數據讀入 # 這個就是sgd優化器的案例 x_data = datasets.load_iris().data##加載數據集所有特征 y_data = datasets.load_iris().target##加載數據集所有標簽 # 數據集亂序 np.random.seed(116)#使用相同的seed,使輸入特征/標簽一一對應 np.random.shuffle(x_data) np.random.seed(116) np.random.shuffle(y_data) tf.random.set_seed(116) # 生成訓練集和測試集 數據總量150,訓練:測試一般 4:1 x_train = x_data[:-30] y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] # 配成(輸入特征,標簽)對,每次讀入一小批(batch) train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32) ##tf.data.Dataset.from_tensor_slices()的作用是使輸入標簽配對打包###搭建神經網絡 # 定義神經網絡中的可訓練參數 #生成神經網絡參數,4個輸入特征,所以輸入層為4個輸入節點,因為是分成3類,所以輸出層為3個神經元 w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1)) b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#學習率,不能太大或太小 train_loss_results = []#記錄每輪loss test_acc = []#將每輪的acc記錄下來 epoch = 500#循環次數 loss_all = 0#記錄每輪四個step的loss和 ###參數優化 # 嵌套循環迭代,with結構更新參數,顯示當前loss ############################################################ m_w, m_b = 0, 0 v_w, v_b = 0, 0 beta1, beta2 = 0.9, 0.999 delta_w, delta_b = 0, 0 global_step = 0 ############################################################ now_time = time.time()###記錄起始時間 for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神經網絡乘加運算y = tf.nn.softmax(y)#使y結果符合概率分布 與獨熱碼求lossy_ = tf.one_hot(y_train, depth = 3)#將標簽轉為獨熱碼,方便計算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方誤差損失函數loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])##########################################################adamm_w = beta1 * m_w + (1 - beta1) * grads[0]m_b = beta1 * m_b + (1 - beta1) * grads[1]v_w = beta2 * v_w + (1 - beta2) * tf.square(grads[0])v_b = beta2 * v_b + (1 - beta2) * tf.square(grads[1])m_w_correction = m_w / (1 - tf.pow(beta1, int(global_step)))m_b_correction = m_b / (1 - tf.pow(beta1, int(global_step)))v_w_correction = v_w / (1 - tf.pow(beta2, int(global_step)))v_b_correction = v_b / (1 - tf.pow(beta2, int(global_step)))w1.assign_sub(lr * m_w_correction / tf.sqrt(v_w_correction))b1.assign_sub(lr * m_b_correction / tf.sqrt(v_b_correction))#########################################################每個epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#記錄四個step的loss平均值loss_all = 0#歸0,為下一次做準備 ###測試效果 # 計算當前參數向后傳播的準確率,顯示當前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用訓練得到的參數進行預測y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即預測到的值#將pred轉換為y_test類型pred = tf.cast(pred, dtype=y_test.dtype)#將比較結果的布爾型轉換為int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分類正確則+1total_correct += int(correct)#累加,方便后面求正確率total_number += x_test.shape[0]#測試總樣本數acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------") total_time = time.time() - now_time print("total_time", total_time)##記錄訓練時間 ##繪制loss曲線方便觀察 plt.title("Loss Function Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('loss')#y軸變量名 plt.plot(train_loss_results, label="$Loss$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像##繪制acc曲線方便觀察 plt.title("Acc Curve") plt.xlabel('Epoch')#x軸變量名 plt.ylabel('Acc')#y軸變量名 plt.plot(test_acc, label="$Accuracy$") plt.legend()#畫出曲線圖標 plt.show()#畫出圖像

總結

以上是生活随笔為你收集整理的机器学习(六)——优化器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。