TF Cookbook 使用多层神经网络

mac2024-03-11  25

import matplotlib.pyplot as plt import numpy as np import csv import tensorflow as tf sess=tf.Session() birth_weight_file = 'birth.csv' birth_data = [] with open(birth_weight_file, newline='') as csvfile: csv_reader = csv.reader(csvfile) # 使用csv.reader读取csvfile中的文件 birth_header = next(csv_reader) # 读取第一行每一列的标题 for row in csv_reader: # 将csv 文件中的数据保存到birth_data中 birth_data.append(row) birth_data = [[float(x) for x in row] for row in birth_data] # 将数据转换为float格式 # 对于每组数据而言,第8列(序号从0开始)即为标签序列-体重 y_vals = np.array([x[10] for x in birth_data]) # 特征序列 cols_of_interest = ['AGE', 'LWT', 'RACE', 'SMOKE', 'PTL', 'HT', 'UI','PTV'] x_vals = np.array( [[x[ix] for ix, feature in enumerate(birth_header) if feature in cols_of_interest] for x in birth_data]) # 数组一维使用for x in birth_data遍历整个数组 # enumerate(birth_header)函数返回ix索引和feature特征,用读取的feature和cols_of_interest进行匹配 # 使x[ix]数据存入数组中 # 设置种子使得可以复现 seed=3 tf.set_random_seed(seed) batch_size=100 # 分割数据集为80-20的训练集和测试集,后使用min-max方法归一化输入特征数据为0到1之间 train_indices=np.random.choice(len(x_vals),round(len(x_vals)*0.8),replace=False) test_indices=np.array(list(set(range(len(x_vals)))-set(train_indices))) x_vals_train=x_vals[train_indices] x_vals_test=x_vals[test_indices] y_vals_train=y_vals[train_indices] y_vals_test=y_vals[test_indices] def normalize_cols(m): col_max=m.max(axis=0) col_min=m.min(axis=0) return(m-col_min)/(col_max-col_min) # 归一化,利于激励函数 x_vals_train=np.nan_to_num(normalize_cols(x_vals_train)) x_vals_test=np.nan_to_num(normalize_cols(x_vals_test)) def init_weight(shape,st_dev): weight=tf.Variable(tf.random_normal(shape,stddev=st_dev)) return(weight) def init_bias(shape,st_dev): bias=tf.Variable(tf.random_normal(shape,stddev=st_dev)) return(bias) # 初始化占位符,这里有8个输入特征和1个输出结果 x_data=tf.placeholder(shape=[None,8],dtype=tf.float32) y_target=tf.placeholder(shape=[None,1],dtype=tf.float32) # 全连接层将在三个隐藏层中使用三次,为避免重复,使用层函数来初始化算法模型 def fully_connected(input_layer,weights,biases): layer=tf.add(tf.matmul(input_layer,weights),biases) return(tf.nn.relu(layer)) weight_1=init_weight(shape=[8,25],st_dev=10.0) bias_1=init_bias(shape=[25],st_dev=10.0) layer_1=fully_connected(x_data,weight_1,bias_1) weight_2=init_weight(shape=[25,10],st_dev=10.0) bias_2=init_bias(shape=[10],st_dev=10.0) layer_2=fully_connected(layer_1,weight_2,bias_2) weight_3=init_weight(shape=[10,3],st_dev=10.0) bias_3=init_bias(shape=[3],st_dev=10.0) layer_3=fully_connected(layer_2,weight_3,bias_3) weight_4=init_weight(shape=[3,1],st_dev=10.0) bias_4=init_bias(shape=[1],st_dev=10.0) final_output=fully_connected(layer_3,weight_4,bias_4) loss=tf.reduce_mean(tf.abs(y_target - final_output )) my_opt=tf.train.AdamOptimizer(0.05) train_step=my_opt.minimize(loss) init=tf.global_variables_initializer() sess.run(init) loss_vec=[] test_loss=[] for i in range(200): rand_index=np.random.choice(len(x_vals_train),size=batch_size) rand_x=x_vals_train[rand_index] rand_y=np.transpose([y_vals_train[rand_index]]) # rand_x = x_vals_train[rand_index] # shape=[batch_size,8] # rand_y = y_vals_train[rand_index].reshape([batch_size, 1]) sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y}) temp_loss=sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y}) loss_vec.append(temp_loss) test_temp_loss=sess.run(loss,feed_dict={x_data:x_vals_test,y_target:np.transpose([y_vals_test])}) test_loss.append(test_temp_loss) if(i+1)%25==0: print("Generation : "+str(i+1) +' Loss = '+str(temp_loss))
最新回复(0)