1. 程式人生 > 其它 >fit函式 model_Tensorflow2.0中複雜損失函式實現

fit函式 model_Tensorflow2.0中複雜損失函式實現

計算機小白。請大神指教,不喜勿噴!!!謝謝

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

//函式宣告
//給陣列初始化
void chu_shi_hua(struct dong_tai* p_st_arr);
//判斷陣列容量
void pan_duan_rong_liang(struct dong_tai* p_st_arr);
//往數組裡新增資料
void tian_jia_shu_ju(struct dong_tai* p_st_arr, int shu_ju);
//輸出結果
void shu_chu(struct
dong_tai* p_st_arr); //刪除結尾 void shan_jie_wei(struct dong_tai* p_st_arr); //從陣列中間增加資料 void zeng_jia_zhong_jian(struct dong_tai* p_st_arr, int shu_ju, int wei_zhi); //刪除指定資料(刪除下標資料) void shan_chu_zhi_ding(struct dong_tai* p_st_arr, int xia_biao); //刪除指定資料(刪除數量即第幾個) void shan_chu_zhi_ding_wei_zhi(struct dong_tai* p_st_arr, int
shu_liang); //刪除全部資料 void shan_chu_quan_bu(struct dong_tai* p_st_arr); //釋放陣列 void shi_fang_shu_zu(struct dong_tai* p_st_arr); //定義一個動態陣列 struct dong_tai { int rong_liang; //陣列的容量即大小 int* pshou_di_zhi; //陣列的首地址 int shu_liang; //數組裡面所裝的元素的數量 }; int main(void) { struct dong_tai st_arr; chu_shi_hua(
&st_arr); //新增資料 tian_jia_shu_ju(&st_arr, 3); tian_jia_shu_ju(&st_arr, 2); tian_jia_shu_ju(&st_arr, 1); tian_jia_shu_ju(&st_arr, 0); tian_jia_shu_ju(&st_arr, 9); tian_jia_shu_ju(&st_arr, 8); tian_jia_shu_ju(&st_arr, 7); tian_jia_shu_ju(&st_arr, 6); //從任意位置新增資料 zeng_jia_zhong_jian(&st_arr, 99999, 1); zeng_jia_zhong_jian(&st_arr, 888, 24); zeng_jia_zhong_jian(&st_arr, 777, 245); zeng_jia_zhong_jian(&st_arr, 666, 524); zeng_jia_zhong_jian(&st_arr, 555, 124); zeng_jia_zhong_jian(&st_arr, 444, 10); zeng_jia_zhong_jian(&st_arr, 777, 18); zeng_jia_zhong_jian(&st_arr, 111, 11); zeng_jia_zhong_jian(&st_arr, 6666, 15); zeng_jia_zhong_jian(&st_arr, 23, 30); zeng_jia_zhong_jian(&st_arr, 123, 2); zeng_jia_zhong_jian(&st_arr, 456, 12); zeng_jia_zhong_jian(&st_arr, 789, 9); //刪除結尾 shan_jie_wei(&st_arr); shan_jie_wei(&st_arr); shan_jie_wei(&st_arr); //刪除指定元素 shan_chu_zhi_ding(&st_arr, 2); //刪除的是下標元素 //刪除指定位置資料 shan_chu_zhi_ding_wei_zhi(&st_arr, 34); //輸出結果 shu_chu(&st_arr); //刪除全部資料 shan_chu_quan_bu(&st_arr); //輸出結果 shu_chu(&st_arr); //釋放陣列 shi_fang_shu_zu(&st_arr); //輸出結果 shu_chu(&st_arr); //釋放容量不夠時申請的空間 free(st_arr.pshou_di_zhi); system("pause"); return 0; } //給陣列初始化 void chu_shi_hua(struct dong_tai* p_st_arr) { //引數合法性檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } p_st_arr->rong_liang = 5; p_st_arr->shu_liang = 0; p_st_arr->pshou_di_zhi = (int *)malloc(sizeof(int) * p_st_arr->rong_liang); //檢測空間是否申請成功 if (NULL == p_st_arr->pshou_di_zhi) { printf("空間申請失敗\n"); return; } } //判斷陣列容量 void pan_duan_rong_liang(struct dong_tai* p_st_arr) { //引數合法性檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } if (p_st_arr->shu_liang == p_st_arr->rong_liang) { p_st_arr->rong_liang += 10; //重新申請空間 int* pTemp = (int*)malloc(sizeof(int) * p_st_arr->rong_liang); //檢測新空間是否申請成功 if(NULL ==pTemp) { printf("空間申請失敗"); } //將原空間資料複製進新空間 for (int i = 0; i < p_st_arr->shu_liang; i++) { pTemp[i] = p_st_arr->pshou_di_zhi[i]; } //釋放原空間 free(p_st_arr->pshou_di_zhi); //使首地址指向新空間 p_st_arr->pshou_di_zhi = pTemp; } } //往數組裡新增資料 void tian_jia_shu_ju(struct dong_tai* p_st_arr, int shu_ju) { //引數判斷 if (NULL == p_st_arr) { printf("引數錯誤"); return; } //判斷陣列容量 pan_duan_rong_liang(p_st_arr); //把資料傳進陣列 p_st_arr->pshou_di_zhi[p_st_arr->shu_liang] = shu_ju; p_st_arr->shu_liang++; } //從陣列中間增加資料 void zeng_jia_zhong_jian(struct dong_tai* p_st_arr, int shu_ju,int wei_zhi) { //引數檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } //判斷容量 pan_duan_rong_liang(p_st_arr); //如果位置大於數量 則將資料直接插入陣列結尾 if (wei_zhi > p_st_arr->shu_liang) { p_st_arr->pshou_di_zhi[p_st_arr->shu_liang] = shu_ju; p_st_arr->shu_liang++; return; //wei_zhi = p_st_arr->shu_liang; } //將指定位置資料後面的資料依次向後移 for (int i = p_st_arr->shu_liang; i >= wei_zhi; i--)//注:如果所傳遞的是下標 那麼就不需要i>wei_zhi-1就直接是i>xia_biao { p_st_arr->pshou_di_zhi[i] = p_st_arr->pshou_di_zhi[i - 1]; } //將指定資料放入指定位置 p_st_arr->pshou_di_zhi[wei_zhi-1] = shu_ju;//注:如果所傳遞的是下標 那麼就不需要i>wei_zhi-1就直接是i>xia_biao p_st_arr->shu_liang++; } //刪除陣列結尾資料 void shan_jie_wei(struct dong_tai* p_st_arr) { //引數檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } p_st_arr->shu_liang--; } //刪除指定資料(刪除下標元素) void shan_chu_zhi_ding(struct dong_tai* p_st_arr,int xia_biao) { //引數檢測 if(NULL==p_st_arr) { printf("引數錯誤\n"); return; } //下標大於數量時 if (xia_biao >= p_st_arr->shu_liang) { printf("刪除資料發生錯誤\n"); return; } //將刪除指定下標後面的資料依次前移 for (int i = xia_biao; i < p_st_arr->shu_liang; i++) { p_st_arr->pshou_di_zhi[i] = p_st_arr->pshou_di_zhi[i+1]; } //刪除後數量減一 p_st_arr->shu_liang--; } //刪除指定資料(刪除數量即第幾個) void shan_chu_zhi_ding_wei_zhi(struct dong_tai* p_st_arr,int wei_zhi) { //引數檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } //下標大於數量時 if (wei_zhi >= p_st_arr->shu_liang) { printf("刪除資料發生錯誤\n"); return; } //將刪除指定位置的數字後面的資料依次前移 for (int i = wei_zhi-1; i < p_st_arr->shu_liang-1; i++) { p_st_arr->pshou_di_zhi[i] = p_st_arr->pshou_di_zhi[i + 1]; } //刪除後數量減一 p_st_arr->shu_liang--; } //刪除全部資料 void shan_chu_quan_bu(struct dong_tai* p_st_arr) { //引數檢測 if(NULL == p_st_arr) { printf("引數錯誤\n"); return; } //令數量為零 p_st_arr->shu_liang = 0; } //釋放陣列 void shi_fang_shu_zu(struct dong_tai* p_st_arr) { //引數檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } //容量等於0 p_st_arr->rong_liang = 0; //數量等於0 p_st_arr->shu_liang = 0; //釋放空間 free(p_st_arr->pshou_di_zhi); p_st_arr->pshou_di_zhi = NULL; } //輸出結果 void shu_chu(struct dong_tai* p_st_arr) { //引數檢測 if (NULL == p_st_arr) { printf("引數錯誤\n"); return; } //輸出容量、數量、以及數組裡面的資料 printf("數量: %d, 容量: %d\n", p_st_arr->shu_liang, p_st_arr->rong_liang); printf("資料: "); for (int i = 0; i < p_st_arr->shu_liang; i++) { printf("%d ", p_st_arr->pshou_di_zhi[i]); } printf("\n\n\n"); }