TensorFlow Fold入门教程:构建与操作块

需积分: 9 40 下载量 90 浏览量 更新于2024-07-20 收藏 1.28MB PPTX 举报
TensorFlow Fold 是一个基于 TensorFlow 的高级编程库,它提供了一种更直观、模块化的编程方式来构建复杂的计算图。"TensorFlow Fold QuickStart"教程更新于2017年3月23日,主要关注如何使用 TensorFlow Fold 的基本块(blocks)结构来组织和执行计算任务。 在 TensorFlow Fold 中,基础的 block 类型包括 scalar_block 和 vector3_block,它们分别代表标量和三维向量。scalar_block 是一个浮点32类型的标量值,其输入类型为 PyObject,输出类型为 TensorType,表示无维度的 float32 数值。vector3_block 则是一个具有 3 个元素的浮点32向量,输入和输出类型同样为 PyObject 和 TensorType,但输出是三维张量。 教程演示了如何通过 .eval() 方法对这些块进行评估。例如,scalar_block.eval(10) 返回一个数值 10.0,而 vector3_block.eval([1,2,3]) 返回一个包含 [1.0, 2.0, 3.0] 的数组。这展示了如何将数据馈送到 block 中并获取相应的计算结果。 此外,TensorFlow Fold 还支持通过 Record 块来组合简单的块。Record 块接受一个字典、列表或元组作为输入,并将其元素分别传递给子块。例如,record_block = td.Record({'foo': scalar_block, 'bar': vector3_block}) 将 scalar_block 和 vector3_block 组合在一起,记录块的输入 {'foo': 1, 'bar': [2, 3, 4]} 会被拆分并传递给相应的块,输出结果为 (array([2.0, 3.0, 4.0], dtype=float32), array(1.0, dtype=float32))。 最后,教程提到了 >> 运算符,这是一个用于构建管道的关键概念,允许用户通过将 record_block 连接到其他 block,如 td.Concat(),来创建更复杂的计算流程。通过这种方式,开发者可以方便地设计和连接多个 block,形成高效的计算图,提高代码的可读性和复用性。 TensorFlow Fold 强调了块的可复用性、组合性和数据流式的编程模型,使得构建和管理大型计算图变得更加直观和高效。这对于理解和开发复杂的机器学习和深度学习模型尤其有用。

将这段代码改为输出的AUC、f1_score、Accuracy是可重复的:# 定义模型参数 input_dim = X_train.shape[1] epochs = 100 batch_size = 32 learning_rate = 0.001 dropout_rate = 0.1 # 定义模型结构 def create_model(): model = Sequential() model.add(Dense(64, input_dim=input_dim, activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(32, activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(1, activation='sigmoid')) optimizer = Adam(learning_rate=learning_rate) model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']) return model # 5折交叉验证 kf = KFold(n_splits=5, shuffle=True, random_state=42) cv_scores = [] for train_index, test_index in kf.split(X_train): # 划分训练集和验证集 X_train_fold, X_val_fold = X_train.iloc[train_index], X_train.iloc[test_index] y_train_fold, y_val_fold = y_train_forced_turnover_nolimited.iloc[train_index], y_train_forced_turnover_nolimited.iloc[test_index] # 创建模型 model = create_model() # 定义早停策略 #early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1) # 训练模型 model.fit(X_train_fold, y_train_fold, validation_data=(X_val_fold, y_val_fold), epochs=epochs, batch_size=batch_size,verbose=1) # 预测验证集 y_pred = model.predict(X_val_fold) # 计算AUC指标 auc = roc_auc_score(y_val_fold, y_pred) cv_scores.append(auc) # 输出交叉验证结果 print('CV AUC:', np.mean(cv_scores)) # 在全量数据上重新训练模型 model = create_model() model.fit(X_train, y_train_forced_turnover_nolimited, epochs=epochs, batch_size=batch_size, verbose=1) #测试集结果 test_pred = model.predict(X_test) test_auc = roc_auc_score(y_test_forced_turnover_nolimited, test_pred) test_f1_score = f1_score(y_test_forced_turnover_nolimited, np.round(test_pred)) test_accuracy = accuracy_score(y_test_forced_turnover_nolimited, np.round(test_pred)) print('Test AUC:', test_auc) print('Test F1 Score:', test_f1_score) print('Test Accuracy:', test_accuracy) #训练集结果 train_pred = model.predict(X_train) train_auc = roc_auc_score(y_train_forced_turnover_nolimited, train_pred) train_f1_score = f1_score(y_train_forced_turnover_nolimited, np.round(train_pred)) train_accuracy = accuracy_score(y_train_forced_turnover_nolimited, np.round(train_pred)) print('Train AUC:', train_auc) print('Train F1 Score:', train_f1_score) print('Train Accuracy:', train_accuracy)

2023-06-01 上传

修改代码,使得输出结果是可重复的:# 定义模型参数 input_dim = X_train.shape[1] epochs = 100 batch_size = 32 learning_rate = 0.01 dropout_rate = 0.7 # 定义模型结构 def create_model(): model = Sequential() model.add(Dense(64, input_dim=input_dim, activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(32, activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(1, activation='sigmoid')) optimizer = Adam(learning_rate=learning_rate) model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']) return model # 5折交叉验证 kf = KFold(n_splits=5, shuffle=True, random_state=42) cv_scores = [] for train_index, test_index in kf.split(X_train): # 划分训练集和验证集 X_train_fold, X_val_fold = X_train.iloc[train_index], X_train.iloc[test_index] y_train_fold, y_val_fold = y_train_forced_turnover_nolimited.iloc[train_index], y_train_forced_turnover_nolimited.iloc[test_index] # 创建模型 model = create_model() # 定义早停策略 #early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1) # 训练模型 model.fit(X_train_fold, y_train_fold, validation_data=(X_val_fold, y_val_fold), epochs=epochs, batch_size=batch_size,verbose=1) # 预测验证集 y_pred = model.predict(X_val_fold) # 计算AUC指标 auc = roc_auc_score(y_val_fold, y_pred) cv_scores.append(auc) # 输出交叉验证结果 print('CV AUC:', np.mean(cv_scores)) # 在全量数据上重新训练模型 model = create_model() model.fit(X_train, y_train_forced_turnover_nolimited, epochs=epochs, batch_size=batch_size, verbose=1) #测试集结果 test_pred = model.predict(X_test) test_auc = roc_auc_score(y_test_forced_turnover_nolimited, test_pred) test_f1_score = f1_score(y_test_forced_turnover_nolimited, np.round(test_pred)) test_accuracy = accuracy_score(y_test_forced_turnover_nolimited, np.round(test_pred)) print('Test AUC:', test_auc) print('Test F1 Score:', test_f1_score) print('Test Accuracy:', test_accuracy) #训练集结果 train_pred = model.predict(X_train) train_auc = roc_auc_score(y_train_forced_turnover_nolimited, train_pred) train_f1_score = f1_score(y_train_forced_turnover_nolimited, np.round(train_pred)) train_accuracy = accuracy_score(y_train_forced_turnover_nolimited, np.round(train_pred)) print('Train AUC:', train_auc) print('Train F1 Score:', train_f1_score) print('Train Accuracy:', train_accuracy)

2023-06-02 上传