You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

tf01_keras_to_estimator.ipynb 98 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 1,
  6. "metadata": {
  7. "scrolled": true
  8. },
  9. "outputs": [
  10. {
  11. "name": "stdout",
  12. "output_type": "stream",
  13. "text": [
  14. "2.2.0\n",
  15. "sys.version_info(major=3, minor=6, micro=9, releaselevel='final', serial=0)\n",
  16. "matplotlib 3.3.4\n",
  17. "numpy 1.19.5\n",
  18. "pandas 1.1.5\n",
  19. "sklearn 0.24.2\n",
  20. "tensorflow 2.2.0\n",
  21. "tensorflow.keras 2.3.0-tf\n"
  22. ]
  23. }
  24. ],
  25. "source": [
  26. "import matplotlib as mpl\n",
  27. "import matplotlib.pyplot as plt\n",
  28. "%matplotlib inline\n",
  29. "import numpy as np\n",
  30. "import sklearn\n",
  31. "import pandas as pd\n",
  32. "import os\n",
  33. "import sys\n",
  34. "import time\n",
  35. "import tensorflow as tf\n",
  36. "\n",
  37. "from tensorflow import keras\n",
  38. "\n",
  39. "print(tf.__version__)\n",
  40. "print(sys.version_info)\n",
  41. "for module in mpl, np, pd, sklearn, tf, keras:\n",
  42. " print(module.__name__, module.__version__)"
  43. ]
  44. },
  45. {
  46. "cell_type": "code",
  47. "execution_count": 2,
  48. "metadata": {},
  49. "outputs": [
  50. {
  51. "name": "stdout",
  52. "output_type": "stream",
  53. "text": [
  54. " survived sex age n_siblings_spouses parch fare class deck \\\n",
  55. "0 0 male 22.0 1 0 7.2500 Third unknown \n",
  56. "1 1 female 38.0 1 0 71.2833 First C \n",
  57. "2 1 female 26.0 0 0 7.9250 Third unknown \n",
  58. "3 1 female 35.0 1 0 53.1000 First C \n",
  59. "4 0 male 28.0 0 0 8.4583 Third unknown \n",
  60. "\n",
  61. " embark_town alone \n",
  62. "0 Southampton n \n",
  63. "1 Cherbourg n \n",
  64. "2 Southampton y \n",
  65. "3 Southampton n \n",
  66. "4 Queenstown y \n",
  67. " survived sex age n_siblings_spouses parch fare class \\\n",
  68. "0 0 male 35.0 0 0 8.0500 Third \n",
  69. "1 0 male 54.0 0 0 51.8625 First \n",
  70. "2 1 female 58.0 0 0 26.5500 First \n",
  71. "3 1 female 55.0 0 0 16.0000 Second \n",
  72. "4 1 male 34.0 0 0 13.0000 Second \n",
  73. "\n",
  74. " deck embark_town alone \n",
  75. "0 unknown Southampton y \n",
  76. "1 E Southampton y \n",
  77. "2 C Southampton y \n",
  78. "3 unknown Southampton y \n",
  79. "4 D Southampton y \n",
  80. "--------------------------------------------------\n",
  81. "(627, 10)\n",
  82. "(264, 10)\n"
  83. ]
  84. }
  85. ],
  86. "source": [
  87. "# https://storage.googleapis.com/tf-datasets/titanic/train.csv\n",
  88. "# https://storage.googleapis.com/tf-datasets/titanic/eval.csv\n",
  89. "#fare 票价\n",
  90. "# n_siblings_spouses 兄弟姐妹,配偶总计数目\n",
  91. "# parch 不同代直系亲属\n",
  92. "#class 舱位的等级\n",
  93. "train_file = \"./data/titanic/train.csv\"\n",
  94. "eval_file = \"./data/titanic/eval.csv\"\n",
  95. "\n",
  96. "train_df = pd.read_csv(train_file)\n",
  97. "eval_df = pd.read_csv(eval_file)\n",
  98. "\n",
  99. "print(train_df.head())\n",
  100. "print(eval_df.head())\n",
  101. "print('-'*50)\n",
  102. "print(train_df.shape)\n",
  103. "print(eval_df.shape)"
  104. ]
  105. },
  106. {
  107. "cell_type": "code",
  108. "execution_count": 3,
  109. "metadata": {},
  110. "outputs": [
  111. {
  112. "name": "stdout",
  113. "output_type": "stream",
  114. "text": [
  115. " sex age n_siblings_spouses parch fare class deck \\\n",
  116. "0 male 22.0 1 0 7.2500 Third unknown \n",
  117. "1 female 38.0 1 0 71.2833 First C \n",
  118. "2 female 26.0 0 0 7.9250 Third unknown \n",
  119. "3 female 35.0 1 0 53.1000 First C \n",
  120. "4 male 28.0 0 0 8.4583 Third unknown \n",
  121. "\n",
  122. " embark_town alone \n",
  123. "0 Southampton n \n",
  124. "1 Cherbourg n \n",
  125. "2 Southampton y \n",
  126. "3 Southampton n \n",
  127. "4 Queenstown y \n",
  128. "--------------------------------------------------\n",
  129. " sex age n_siblings_spouses parch fare class deck \\\n",
  130. "0 male 35.0 0 0 8.0500 Third unknown \n",
  131. "1 male 54.0 0 0 51.8625 First E \n",
  132. "2 female 58.0 0 0 26.5500 First C \n",
  133. "3 female 55.0 0 0 16.0000 Second unknown \n",
  134. "4 male 34.0 0 0 13.0000 Second D \n",
  135. "\n",
  136. " embark_town alone \n",
  137. "0 Southampton y \n",
  138. "1 Southampton y \n",
  139. "2 Southampton y \n",
  140. "3 Southampton y \n",
  141. "4 Southampton y \n",
  142. "--------------------------------------------------\n",
  143. "0 0\n",
  144. "1 1\n",
  145. "2 1\n",
  146. "3 1\n",
  147. "4 0\n",
  148. "Name: survived, dtype: int64\n",
  149. "--------------------------------------------------\n",
  150. "0 0\n",
  151. "1 0\n",
  152. "2 1\n",
  153. "3 1\n",
  154. "4 1\n",
  155. "Name: survived, dtype: int64\n"
  156. ]
  157. }
  158. ],
  159. "source": [
  160. "#把目标值提取出来\n",
  161. "y_train = train_df.pop('survived')\n",
  162. "y_eval = eval_df.pop('survived')\n",
  163. "\n",
  164. "print(train_df.head())\n",
  165. "print('-'*50)\n",
  166. "print(eval_df.head())\n",
  167. "print('-'*50)\n",
  168. "print(y_train.head())\n",
  169. "print('-'*50)\n",
  170. "print(y_eval.head())"
  171. ]
  172. },
  173. {
  174. "cell_type": "code",
  175. "execution_count": 4,
  176. "metadata": {},
  177. "outputs": [
  178. {
  179. "data": {
  180. "text/html": [
  181. "<div>\n",
  182. "<style scoped>\n",
  183. " .dataframe tbody tr th:only-of-type {\n",
  184. " vertical-align: middle;\n",
  185. " }\n",
  186. "\n",
  187. " .dataframe tbody tr th {\n",
  188. " vertical-align: top;\n",
  189. " }\n",
  190. "\n",
  191. " .dataframe thead th {\n",
  192. " text-align: right;\n",
  193. " }\n",
  194. "</style>\n",
  195. "<table border=\"1\" class=\"dataframe\">\n",
  196. " <thead>\n",
  197. " <tr style=\"text-align: right;\">\n",
  198. " <th></th>\n",
  199. " <th>age</th>\n",
  200. " <th>n_siblings_spouses</th>\n",
  201. " <th>parch</th>\n",
  202. " <th>fare</th>\n",
  203. " </tr>\n",
  204. " </thead>\n",
  205. " <tbody>\n",
  206. " <tr>\n",
  207. " <th>count</th>\n",
  208. " <td>627.000000</td>\n",
  209. " <td>627.000000</td>\n",
  210. " <td>627.000000</td>\n",
  211. " <td>627.000000</td>\n",
  212. " </tr>\n",
  213. " <tr>\n",
  214. " <th>mean</th>\n",
  215. " <td>29.631308</td>\n",
  216. " <td>0.545455</td>\n",
  217. " <td>0.379585</td>\n",
  218. " <td>34.385399</td>\n",
  219. " </tr>\n",
  220. " <tr>\n",
  221. " <th>std</th>\n",
  222. " <td>12.511818</td>\n",
  223. " <td>1.151090</td>\n",
  224. " <td>0.792999</td>\n",
  225. " <td>54.597730</td>\n",
  226. " </tr>\n",
  227. " <tr>\n",
  228. " <th>min</th>\n",
  229. " <td>0.750000</td>\n",
  230. " <td>0.000000</td>\n",
  231. " <td>0.000000</td>\n",
  232. " <td>0.000000</td>\n",
  233. " </tr>\n",
  234. " <tr>\n",
  235. " <th>25%</th>\n",
  236. " <td>23.000000</td>\n",
  237. " <td>0.000000</td>\n",
  238. " <td>0.000000</td>\n",
  239. " <td>7.895800</td>\n",
  240. " </tr>\n",
  241. " <tr>\n",
  242. " <th>50%</th>\n",
  243. " <td>28.000000</td>\n",
  244. " <td>0.000000</td>\n",
  245. " <td>0.000000</td>\n",
  246. " <td>15.045800</td>\n",
  247. " </tr>\n",
  248. " <tr>\n",
  249. " <th>75%</th>\n",
  250. " <td>35.000000</td>\n",
  251. " <td>1.000000</td>\n",
  252. " <td>0.000000</td>\n",
  253. " <td>31.387500</td>\n",
  254. " </tr>\n",
  255. " <tr>\n",
  256. " <th>max</th>\n",
  257. " <td>80.000000</td>\n",
  258. " <td>8.000000</td>\n",
  259. " <td>5.000000</td>\n",
  260. " <td>512.329200</td>\n",
  261. " </tr>\n",
  262. " </tbody>\n",
  263. "</table>\n",
  264. "</div>"
  265. ],
  266. "text/plain": [
  267. " age n_siblings_spouses parch fare\n",
  268. "count 627.000000 627.000000 627.000000 627.000000\n",
  269. "mean 29.631308 0.545455 0.379585 34.385399\n",
  270. "std 12.511818 1.151090 0.792999 54.597730\n",
  271. "min 0.750000 0.000000 0.000000 0.000000\n",
  272. "25% 23.000000 0.000000 0.000000 7.895800\n",
  273. "50% 28.000000 0.000000 0.000000 15.045800\n",
  274. "75% 35.000000 1.000000 0.000000 31.387500\n",
  275. "max 80.000000 8.000000 5.000000 512.329200"
  276. ]
  277. },
  278. "execution_count": 4,
  279. "metadata": {},
  280. "output_type": "execute_result"
  281. }
  282. ],
  283. "source": [
  284. "train_df.describe() #查看数据分布"
  285. ]
  286. },
  287. {
  288. "cell_type": "code",
  289. "execution_count": 5,
  290. "metadata": {},
  291. "outputs": [
  292. {
  293. "data": {
  294. "text/html": [
  295. "<div>\n",
  296. "<style scoped>\n",
  297. " .dataframe tbody tr th:only-of-type {\n",
  298. " vertical-align: middle;\n",
  299. " }\n",
  300. "\n",
  301. " .dataframe tbody tr th {\n",
  302. " vertical-align: top;\n",
  303. " }\n",
  304. "\n",
  305. " .dataframe thead th {\n",
  306. " text-align: right;\n",
  307. " }\n",
  308. "</style>\n",
  309. "<table border=\"1\" class=\"dataframe\">\n",
  310. " <thead>\n",
  311. " <tr style=\"text-align: right;\">\n",
  312. " <th></th>\n",
  313. " <th>sex</th>\n",
  314. " <th>class</th>\n",
  315. " <th>deck</th>\n",
  316. " <th>embark_town</th>\n",
  317. " <th>alone</th>\n",
  318. " </tr>\n",
  319. " </thead>\n",
  320. " <tbody>\n",
  321. " <tr>\n",
  322. " <th>count</th>\n",
  323. " <td>627</td>\n",
  324. " <td>627</td>\n",
  325. " <td>627</td>\n",
  326. " <td>627</td>\n",
  327. " <td>627</td>\n",
  328. " </tr>\n",
  329. " <tr>\n",
  330. " <th>unique</th>\n",
  331. " <td>2</td>\n",
  332. " <td>3</td>\n",
  333. " <td>8</td>\n",
  334. " <td>4</td>\n",
  335. " <td>2</td>\n",
  336. " </tr>\n",
  337. " <tr>\n",
  338. " <th>top</th>\n",
  339. " <td>male</td>\n",
  340. " <td>Third</td>\n",
  341. " <td>unknown</td>\n",
  342. " <td>Southampton</td>\n",
  343. " <td>y</td>\n",
  344. " </tr>\n",
  345. " <tr>\n",
  346. " <th>freq</th>\n",
  347. " <td>410</td>\n",
  348. " <td>341</td>\n",
  349. " <td>481</td>\n",
  350. " <td>450</td>\n",
  351. " <td>372</td>\n",
  352. " </tr>\n",
  353. " </tbody>\n",
  354. "</table>\n",
  355. "</div>"
  356. ],
  357. "text/plain": [
  358. " sex class deck embark_town alone\n",
  359. "count 627 627 627 627 627\n",
  360. "unique 2 3 8 4 2\n",
  361. "top male Third unknown Southampton y\n",
  362. "freq 410 341 481 450 372"
  363. ]
  364. },
  365. "execution_count": 5,
  366. "metadata": {},
  367. "output_type": "execute_result"
  368. }
  369. ],
  370. "source": [
  371. "train_df.describe(include='object') #训练集总计样本数627"
  372. ]
  373. },
  374. {
  375. "cell_type": "code",
  376. "execution_count": 6,
  377. "metadata": {},
  378. "outputs": [
  379. {
  380. "name": "stdout",
  381. "output_type": "stream",
  382. "text": [
  383. "(627, 9) (264, 9)\n"
  384. ]
  385. }
  386. ],
  387. "source": [
  388. "print(train_df.shape, eval_df.shape)"
  389. ]
  390. },
  391. {
  392. "cell_type": "code",
  393. "execution_count": 7,
  394. "metadata": {},
  395. "outputs": [
  396. {
  397. "data": {
  398. "text/plain": [
  399. "<AxesSubplot:>"
  400. ]
  401. },
  402. "execution_count": 7,
  403. "metadata": {},
  404. "output_type": "execute_result"
  405. },
  406. {
  407. "data": {
  408. "image/png": "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\n",
  409. "text/plain": [
  410. "<Figure size 432x288 with 1 Axes>"
  411. ]
  412. },
  413. "metadata": {
  414. "needs_background": "light"
  415. },
  416. "output_type": "display_data"
  417. }
  418. ],
  419. "source": [
  420. "train_df.age.hist(bins = 20)"
  421. ]
  422. },
  423. {
  424. "cell_type": "code",
  425. "execution_count": 8,
  426. "metadata": {},
  427. "outputs": [
  428. {
  429. "data": {
  430. "text/plain": [
  431. "<AxesSubplot:>"
  432. ]
  433. },
  434. "execution_count": 8,
  435. "metadata": {},
  436. "output_type": "execute_result"
  437. },
  438. {
  439. "data": {
  440. "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD4CAYAAADo30HgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAMdUlEQVR4nO3cf4xld1nH8c8D225NS4rQhmxacChuJKRAW0tFRQKICF1DQTAhEigJoVEUNabRIpHUVLSCKJqgpCgWFQVBDAghiLTGBLF11/7Y1nah2jVSKw0SlpomVenXP+5ZmGec2XbbmXtmy+uVTPbcc+/e88x3cve959y7W2OMAMBhj5h7AAC2F2EAoBEGABphAKARBgCaHXMPsBlOOeWUsbKyMvcYAMeUffv2fWmMcera/Q+LMKysrGTv3r1zjwFwTKmqf11vv0tJADTCAEAjDAA0wgBAIwwANMIAQCMMADTCAEAjDAA0wgBAIwwANMIAQCMMADTCAEAjDAA0wgBAIwwANMIAQCMMADTCAEAjDAA0wgBAIwwANMIAQCMMADTCAECzY+4BNsP+Ow5l5ZKPzz0GrOvg5XvmHgGOijMGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAmvsNQ1X9VFXdUlXv24oBqurSqrp4K54bgKO34wE85vVJnj/G+MJWDwPA/I4Yhqp6V5Izknyiqt6f5ElJzkxyXJJLxxgfqarXJHlJkhOT7E7y60mOT/KqJPcmOX+M8eWqel2Si6b7bkvyqjHGPWuO96Qk70xyapJ7krxujHHr5nyrADwQR7yUNMb4sST/nuS5WfzBf9UY47zp9tuq6sTpoWcm+eEkz0jyliT3jDHOTvLZJK+eHvPhMcYzxhhPT3JLkteuc8grkrxhjPGdSS5O8jsbzVZVF1XV3qra+7V7Dj2w7xaA+/VALiUd9oIkL171fsAJSZ4wbV89xrg7yd1VdSjJX0779yd52rR9ZlX9cpJHJzkpySdXP3lVnZTke5J8sKoO79650TBjjCuyCEl27to9juL7AOAIjiYMleRlY4wDbWfVd2Vxyeiw+1bdvm/VMa5M8pIxxg3T5afnrHn+RyT5yhjjrKOYCYBNdjQfV/1kkjfU9Nf5qjr7KI/1qCR3VtVxSV659s4xxleT3F5VPzI9f1XV04/yGAA8REcThsuyeNP5xqq6ebp9NH4xyTVJPpNkozeUX5nktVV1Q5Kbk1xwlMcA4CGqMY79y/M7d+0euy58x9xjwLoOXr5n7hFgXVW1b4xx7tr9/uUzAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwDNjrkH2AxPPe3k7L18z9xjADwsOGMAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCgEQYAGmEAoBEGABphAKARBgAaYQCg2TH3AJth/x2HsnLJx+ceA2CpDl6+Z0ue1xkDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAzbYIQ1U9p6o+NvccAGyTMACwfWxaGKpqpapuraorq+pzVfW+qnp+VX2mqj5fVedNX5+tquuq6u+q6jvWeZ4Tq+o9VXXt9LgLNmtGAO7fZp8xfHuStyd58vT1o0meleTiJL+Q5NYk3zfGODvJm5P8yjrP8aYkV40xzkvy3CRvq6oT1z6oqi6qqr1Vtfdr9xza5G8D4JvXjk1+vtvHGPuTpKpuTvLpMcaoqv1JVpKcnOS9VbU7yUhy3DrP8YIkL66qi6fbJyR5QpJbVj9ojHFFkiuSZOeu3WOTvw+Ab1qbHYZ7V23ft+r2fdOxLkty9RjjpVW1kuRv1nmOSvKyMcaBTZ4NgAdg2W8+n5zkjmn7NRs85pNJ3lBVlSRVdfYS5gJgsuwwvDXJr1bVddn4bOWyLC4x3ThdjrpsWcMBkNQYx/7l+Z27do9dF75j7jEAlurg5Xse0u+vqn1jjHPX7vfvGABohAGARhgAaIQBgEYYAGiEAYBGGABohAGARhgAaIQBgEYYAGiEAYBGGABohAGARhgAaIQBgEYYAGiEAYBGGABohAGARhgAaIQBgGbH3ANshqeednL2Xr5n7jEAHhacMQDQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMAjTAA0AgDAI0wANAIAwCNMADQCAMATY0x5p7hIauqu5McmHuODZyS5EtzD7GO7TpXYrYHy2wPzjfzbN82xjh17c4dW3jAZTowxjh37iHWU1V7t+Ns23WuxGwPltkeHLP9fy4lAdAIAwDNwyUMV8w9wBFs19m261yJ2R4ssz04ZlvjYfHmMwCb5+FyxgDAJhEGAJpjOgxV9cKqOlBVt1XVJdtgnoNVtb+qrq+qvdO+x1TVp6rq89Ov37qkWd5TVXdV1U2r9q07Sy389rSON1bVOTPMdmlV3TGt3fVVdf6q+944zXagqn5wi2d7fFVdXVX/VFU3V9VPT/tnXbsjzDX7ulXVCVV1bVXdMM32S9P+J1bVNdMMH6iq46f9O6fbt033r8ww25VVdfuqdTtr2r/U18J0zEdW1XVV9bHp9uzrljHGMfmV5JFJ/jnJGUmOT3JDkqfMPNPBJKes2ffWJJdM25ck+bUlzfLsJOckuen+ZklyfpJPJKkkz0xyzQyzXZrk4nUe+5TpZ7szyROnn/kjt3C2XUnOmbYfleRz0wyzrt0R5pp93abv/aRp+7gk10xr8WdJXjHtf1eSH5+2X5/kXdP2K5J8YAt/nhvNdmWSl6/z+KW+FqZj/mySP0nysen27Ot2LJ8xnJfktjHGv4wx/jvJ+5NcMPNM67kgyXun7fcmeckyDjrG+NskX36As1yQ5A/Hwt8neXRV7VrybBu5IMn7xxj3jjFuT3JbFj/7rZrtzjHGP07bdye5JclpmXntjjDXRpa2btP3/l/TzeOmr5HkeUk+NO1fu2aH1/JDSb6/qmrJs21kqa+Fqjo9yZ4kvzfdrmyDdTuWw3Bakn9bdfsLOfILZRlGkr+qqn1VddG073FjjDun7f9I8rh5RjviLNtlLX9yOn1/z6pLbrPNNp2qn53F3zK3zdqtmSvZBus2XQ65PsldST6VxRnKV8YY/7vO8b8+23T/oSSPXdZsY4zD6/aWad1+s6p2rp1tnbm3wjuS/FyS+6bbj802WLdjOQzb0bPGGOckeVGSn6iqZ6++cyzOAbfF54O30yyT303ypCRnJbkzydvnHKaqTkry50l+Zozx1dX3zbl268y1LdZtjPG1McZZSU7P4szkyXPMsZ61s1XVmUnemMWMz0jymCQ/v+y5quqHktw1xti37GPfn2M5DHckefyq26dP+2Yzxrhj+vWuJH+RxQvki4dPRadf75pvwg1nmX0txxhfnF7A9yV5d75x2WPps1XVcVn84fu+McaHp92zr916c22ndZvm+UqSq5N8dxaXYQ7/f2yrj//12ab7T07yn0uc7YXTpbkxxrg3yR9knnX73iQvrqqDWVwKf16S38o2WLdjOQz/kGT39A7+8Vm8GfPRuYapqhOr6lGHt5O8IMlN00wXTg+7MMlH5pkwOcIsH03y6ukTGc9McmjVZZOlWHMd96VZrN3h2V4xfSLjiUl2J7l2C+eoJL+f5JYxxm+sumvWtdtoru2wblV1alU9etr+liQ/kMV7IFcnefn0sLVrdngtX57kquksbFmz3boq8pXFNfzV67aU18IY441jjNPHGCtZ/Pl11RjjldkG67al77Zv9VcWnyD4XBbXM9808yxnZPEpkBuS3Hx4niyuAX46yeeT/HWSxyxpnj/N4tLC/2RxnfK1G82SxScw3jmt4/4k584w2x9Nx74xixfArlWPf9M024EkL9ri2Z6VxWWiG5NcP32dP/faHWGu2dctydOSXDfNcFOSN696TVybxRvfH0yyc9p/wnT7tun+M2aY7app3W5K8sf5xieXlvpaWDXnc/KNTyXNvm7+SwwAmmP5UhIAW0AYAGiEAYBGGABohAGARhgAaIQBgOb/AEYEJAXn01RlAAAAAElFTkSuQmCC\n",
  441. "text/plain": [
  442. "<Figure size 432x288 with 1 Axes>"
  443. ]
  444. },
  445. "metadata": {
  446. "needs_background": "light"
  447. },
  448. "output_type": "display_data"
  449. }
  450. ],
  451. "source": [
  452. "train_df.sex.value_counts().plot(kind = 'barh') #类别适合画条形图"
  453. ]
  454. },
  455. {
  456. "cell_type": "code",
  457. "execution_count": 9,
  458. "metadata": {},
  459. "outputs": [
  460. {
  461. "name": "stdout",
  462. "output_type": "stream",
  463. "text": [
  464. "<class 'pandas.core.frame.DataFrame'>\n",
  465. "RangeIndex: 627 entries, 0 to 626\n",
  466. "Data columns (total 9 columns):\n",
  467. " # Column Non-Null Count Dtype \n",
  468. "--- ------ -------------- ----- \n",
  469. " 0 sex 627 non-null object \n",
  470. " 1 age 627 non-null float64\n",
  471. " 2 n_siblings_spouses 627 non-null int64 \n",
  472. " 3 parch 627 non-null int64 \n",
  473. " 4 fare 627 non-null float64\n",
  474. " 5 class 627 non-null object \n",
  475. " 6 deck 627 non-null object \n",
  476. " 7 embark_town 627 non-null object \n",
  477. " 8 alone 627 non-null object \n",
  478. "dtypes: float64(2), int64(2), object(5)\n",
  479. "memory usage: 44.2+ KB\n"
  480. ]
  481. }
  482. ],
  483. "source": [
  484. "train_df.info()"
  485. ]
  486. },
  487. {
  488. "cell_type": "code",
  489. "execution_count": 10,
  490. "metadata": {},
  491. "outputs": [
  492. {
  493. "data": {
  494. "text/plain": [
  495. "0 n\n",
  496. "1 n\n",
  497. "2 y\n",
  498. "3 n\n",
  499. "4 y\n",
  500. " ..\n",
  501. "622 y\n",
  502. "623 y\n",
  503. "624 y\n",
  504. "625 n\n",
  505. "626 y\n",
  506. "Name: alone, Length: 627, dtype: object"
  507. ]
  508. },
  509. "execution_count": 10,
  510. "metadata": {},
  511. "output_type": "execute_result"
  512. }
  513. ],
  514. "source": [
  515. "train_df.alone "
  516. ]
  517. },
  518. {
  519. "cell_type": "code",
  520. "execution_count": 11,
  521. "metadata": {},
  522. "outputs": [
  523. {
  524. "data": {
  525. "text/plain": [
  526. "<AxesSubplot:>"
  527. ]
  528. },
  529. "execution_count": 11,
  530. "metadata": {},
  531. "output_type": "execute_result"
  532. },
  533. {
  534. "data": {
  535. "image/png": "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\n",
  536. "text/plain": [
  537. "<Figure size 432x288 with 1 Axes>"
  538. ]
  539. },
  540. "metadata": {
  541. "needs_background": "light"
  542. },
  543. "output_type": "display_data"
  544. }
  545. ],
  546. "source": [
  547. "train_df['class'].value_counts().plot(kind = 'barh')"
  548. ]
  549. },
  550. {
  551. "cell_type": "code",
  552. "execution_count": 12,
  553. "metadata": {},
  554. "outputs": [
  555. {
  556. "name": "stderr",
  557. "output_type": "stream",
  558. "text": [
  559. "/home/zhangmeng/.virtualenvs/tf_py/lib/python3.6/site-packages/ipykernel_launcher.py:4: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
  560. " after removing the cwd from sys.path.\n"
  561. ]
  562. },
  563. {
  564. "data": {
  565. "text/plain": [
  566. "<AxesSubplot:ylabel='age'>"
  567. ]
  568. },
  569. "execution_count": 12,
  570. "metadata": {},
  571. "output_type": "execute_result"
  572. },
  573. {
  574. "data": {
  575. "image/png": "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\n",
  576. "text/plain": [
  577. "<Figure size 432x288 with 1 Axes>"
  578. ]
  579. },
  580. "metadata": {
  581. "needs_background": "light"
  582. },
  583. "output_type": "display_data"
  584. }
  585. ],
  586. "source": [
  587. "#看男性,女性的生成比率,存活是survived为1,未存活是0,谁的存活均值高,就是存活比例\n",
  588. "\n",
  589. "df_age=pd.concat([train_df, y_train], axis = 1)\n",
  590. "df_age[df_age['age']>30][df_age['age']<50].groupby('age').survived.mean().plot(kind='barh')\n",
  591. "\n",
  592. "\n",
  593. "# pd.concat([train_df, y_train], axis = 1).groupby('sex').survived.mean().plot(kind='barh')"
  594. ]
  595. },
  596. {
  597. "cell_type": "code",
  598. "execution_count": 13,
  599. "metadata": {},
  600. "outputs": [
  601. {
  602. "data": {
  603. "text/plain": [
  604. "array(['male', 'female'], dtype=object)"
  605. ]
  606. },
  607. "execution_count": 13,
  608. "metadata": {},
  609. "output_type": "execute_result"
  610. }
  611. ],
  612. "source": [
  613. "train_df['sex'].unique()"
  614. ]
  615. },
  616. {
  617. "cell_type": "code",
  618. "execution_count": 14,
  619. "metadata": {},
  620. "outputs": [
  621. {
  622. "name": "stdout",
  623. "output_type": "stream",
  624. "text": [
  625. "sex ['male' 'female']\n",
  626. "n_siblings_spouses [1 0 3 4 2 5 8]\n",
  627. "parch [0 1 2 5 3 4]\n",
  628. "class ['Third' 'First' 'Second']\n",
  629. "deck ['unknown' 'C' 'G' 'A' 'B' 'D' 'F' 'E']\n",
  630. "embark_town ['Southampton' 'Cherbourg' 'Queenstown' 'unknown']\n",
  631. "alone ['n' 'y']\n"
  632. ]
  633. },
  634. {
  635. "data": {
  636. "text/plain": [
  637. "[IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='sex', vocabulary_list=('male', 'female'), dtype=tf.string, default_value=-1, num_oov_buckets=0)),\n",
  638. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='n_siblings_spouses', vocabulary_list=(1, 0, 3, 4, 2, 5, 8), dtype=tf.int64, default_value=-1, num_oov_buckets=0)),\n",
  639. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='parch', vocabulary_list=(0, 1, 2, 5, 3, 4), dtype=tf.int64, default_value=-1, num_oov_buckets=0)),\n",
  640. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='class', vocabulary_list=('Third', 'First', 'Second'), dtype=tf.string, default_value=-1, num_oov_buckets=0)),\n",
  641. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='deck', vocabulary_list=('unknown', 'C', 'G', 'A', 'B', 'D', 'F', 'E'), dtype=tf.string, default_value=-1, num_oov_buckets=0)),\n",
  642. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='embark_town', vocabulary_list=('Southampton', 'Cherbourg', 'Queenstown', 'unknown'), dtype=tf.string, default_value=-1, num_oov_buckets=0)),\n",
  643. " IndicatorColumn(categorical_column=VocabularyListCategoricalColumn(key='alone', vocabulary_list=('n', 'y'), dtype=tf.string, default_value=-1, num_oov_buckets=0)),\n",
  644. " NumericColumn(key='age', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),\n",
  645. " NumericColumn(key='fare', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None)]"
  646. ]
  647. },
  648. "execution_count": 14,
  649. "metadata": {},
  650. "output_type": "execute_result"
  651. }
  652. ],
  653. "source": [
  654. "#tf的特征工程\n",
  655. "#离散型特征\n",
  656. "#n_siblings_spouses 家庭成员表\n",
  657. "categorical_columns = ['sex', 'n_siblings_spouses', 'parch', 'class',\n",
  658. " 'deck', 'embark_town', 'alone']\n",
  659. "#连续,年龄,票价\n",
  660. "numeric_columns = ['age', 'fare']\n",
  661. "\n",
  662. "feature_columns = []\n",
  663. "#离散特征处理\n",
  664. "for categorical_column in categorical_columns:\n",
  665. " vocab = train_df[categorical_column].unique() #得到某一列的类别数array(['male', 'female'], dtype=object)\n",
  666. " print(categorical_column, vocab)\n",
  667. " feature_columns.append(\n",
  668. " #indicator_column做one-hot编码,将类别值变为one-hot编码\n",
  669. " tf.feature_column.indicator_column(\n",
  670. " tf.feature_column.categorical_column_with_vocabulary_list(\n",
  671. " categorical_column, vocab)))\n",
  672. "#连续\n",
  673. "for categorical_column in numeric_columns:\n",
  674. " feature_columns.append(\n",
  675. " tf.feature_column.numeric_column(\n",
  676. " categorical_column, dtype=tf.float32))\n",
  677. "#特征类别\n",
  678. "feature_columns"
  679. ]
  680. },
  681. {
  682. "cell_type": "code",
  683. "execution_count": 18,
  684. "metadata": {},
  685. "outputs": [
  686. {
  687. "data": {
  688. "text/plain": [
  689. "{'sex': 0 male\n",
  690. " 1 female\n",
  691. " 2 female\n",
  692. " 3 female\n",
  693. " 4 male\n",
  694. " ... \n",
  695. " 622 male\n",
  696. " 623 male\n",
  697. " 624 female\n",
  698. " 625 female\n",
  699. " 626 male\n",
  700. " Name: sex, Length: 627, dtype: object,\n",
  701. " 'age': 0 22.0\n",
  702. " 1 38.0\n",
  703. " 2 26.0\n",
  704. " 3 35.0\n",
  705. " 4 28.0\n",
  706. " ... \n",
  707. " 622 28.0\n",
  708. " 623 25.0\n",
  709. " 624 19.0\n",
  710. " 625 28.0\n",
  711. " 626 32.0\n",
  712. " Name: age, Length: 627, dtype: float64,\n",
  713. " 'n_siblings_spouses': 0 1\n",
  714. " 1 1\n",
  715. " 2 0\n",
  716. " 3 1\n",
  717. " 4 0\n",
  718. " ..\n",
  719. " 622 0\n",
  720. " 623 0\n",
  721. " 624 0\n",
  722. " 625 1\n",
  723. " 626 0\n",
  724. " Name: n_siblings_spouses, Length: 627, dtype: int64,\n",
  725. " 'parch': 0 0\n",
  726. " 1 0\n",
  727. " 2 0\n",
  728. " 3 0\n",
  729. " 4 0\n",
  730. " ..\n",
  731. " 622 0\n",
  732. " 623 0\n",
  733. " 624 0\n",
  734. " 625 2\n",
  735. " 626 0\n",
  736. " Name: parch, Length: 627, dtype: int64,\n",
  737. " 'fare': 0 7.2500\n",
  738. " 1 71.2833\n",
  739. " 2 7.9250\n",
  740. " 3 53.1000\n",
  741. " 4 8.4583\n",
  742. " ... \n",
  743. " 622 10.5000\n",
  744. " 623 7.0500\n",
  745. " 624 30.0000\n",
  746. " 625 23.4500\n",
  747. " 626 7.7500\n",
  748. " Name: fare, Length: 627, dtype: float64,\n",
  749. " 'class': 0 Third\n",
  750. " 1 First\n",
  751. " 2 Third\n",
  752. " 3 First\n",
  753. " 4 Third\n",
  754. " ... \n",
  755. " 622 Second\n",
  756. " 623 Third\n",
  757. " 624 First\n",
  758. " 625 Third\n",
  759. " 626 Third\n",
  760. " Name: class, Length: 627, dtype: object,\n",
  761. " 'deck': 0 unknown\n",
  762. " 1 C\n",
  763. " 2 unknown\n",
  764. " 3 C\n",
  765. " 4 unknown\n",
  766. " ... \n",
  767. " 622 unknown\n",
  768. " 623 unknown\n",
  769. " 624 B\n",
  770. " 625 unknown\n",
  771. " 626 unknown\n",
  772. " Name: deck, Length: 627, dtype: object,\n",
  773. " 'embark_town': 0 Southampton\n",
  774. " 1 Cherbourg\n",
  775. " 2 Southampton\n",
  776. " 3 Southampton\n",
  777. " 4 Queenstown\n",
  778. " ... \n",
  779. " 622 Southampton\n",
  780. " 623 Southampton\n",
  781. " 624 Southampton\n",
  782. " 625 Southampton\n",
  783. " 626 Queenstown\n",
  784. " Name: embark_town, Length: 627, dtype: object,\n",
  785. " 'alone': 0 n\n",
  786. " 1 n\n",
  787. " 2 y\n",
  788. " 3 n\n",
  789. " 4 y\n",
  790. " ..\n",
  791. " 622 y\n",
  792. " 623 y\n",
  793. " 624 y\n",
  794. " 625 n\n",
  795. " 626 y\n",
  796. " Name: alone, Length: 627, dtype: object}"
  797. ]
  798. },
  799. "execution_count": 18,
  800. "metadata": {},
  801. "output_type": "execute_result"
  802. }
  803. ],
  804. "source": [
  805. "dict(train_df) #把df变为字典,就是前面键是列名,后面是对应列的series"
  806. ]
  807. },
  808. {
  809. "cell_type": "code",
  810. "execution_count": 15,
  811. "metadata": {},
  812. "outputs": [
  813. {
  814. "data": {
  815. "text/plain": [
  816. "0 0\n",
  817. "1 1\n",
  818. "2 1\n",
  819. "3 1\n",
  820. "4 0\n",
  821. " ..\n",
  822. "622 0\n",
  823. "623 0\n",
  824. "624 1\n",
  825. "625 0\n",
  826. "626 0\n",
  827. "Name: survived, Length: 627, dtype: int64"
  828. ]
  829. },
  830. "execution_count": 15,
  831. "metadata": {},
  832. "output_type": "execute_result"
  833. }
  834. ],
  835. "source": [
  836. "y_train"
  837. ]
  838. },
  839. {
  840. "cell_type": "code",
  841. "execution_count": 16,
  842. "metadata": {},
  843. "outputs": [],
  844. "source": [
  845. "#把特征,目标都传入,构建我们的dataset\n",
  846. "def make_dataset(data_df, label_df, epochs = 10, shuffle = True,\n",
  847. " batch_size = 32):\n",
  848. " #把df类变为dataset\n",
  849. " dataset = tf.data.Dataset.from_tensor_slices((dict(data_df), label_df))\n",
  850. "# dataset = tf.data.Dataset.from_tensor_slices((data_df, label_df))\n",
  851. " #是否需要洗牌,不同样本顺序打乱\n",
  852. " if shuffle:\n",
  853. " dataset = dataset.shuffle(10000) #10000是缓存的大小\n",
  854. " dataset = dataset.repeat(epochs).batch(batch_size)\n",
  855. " return dataset #变为了batchdataset类型"
  856. ]
  857. },
  858. {
  859. "cell_type": "code",
  860. "execution_count": 17,
  861. "metadata": {},
  862. "outputs": [],
  863. "source": [
  864. "train_dataset = make_dataset(train_df, y_train, batch_size = 5) #做个测试"
  865. ]
  866. },
  867. {
  868. "cell_type": "code",
  869. "execution_count": 22,
  870. "metadata": {},
  871. "outputs": [
  872. {
  873. "name": "stdout",
  874. "output_type": "stream",
  875. "text": [
  876. "{'sex': <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'male', b'male', b'female', b'male', b'female'], dtype=object)>, 'age': <tf.Tensor: shape=(5,), dtype=float64, numpy=array([28., 26., 45., 19., 11.])>, 'n_siblings_spouses': <tf.Tensor: shape=(5,), dtype=int64, numpy=array([0, 0, 0, 0, 4])>, 'parch': <tf.Tensor: shape=(5,), dtype=int64, numpy=array([0, 0, 0, 0, 2])>, 'fare': <tf.Tensor: shape=(5,), dtype=float64, numpy=array([ 7.8958, 7.775 , 7.75 , 7.775 , 31.275 ])>, 'class': <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'Third', b'Third', b'Third', b'Third', b'Third'], dtype=object)>, 'deck': <tf.Tensor: shape=(5,), dtype=string, numpy=\n",
  877. "array([b'unknown', b'unknown', b'unknown', b'unknown', b'unknown'],\n",
  878. " dtype=object)>, 'embark_town': <tf.Tensor: shape=(5,), dtype=string, numpy=\n",
  879. "array([b'Southampton', b'Southampton', b'Southampton', b'Southampton',\n",
  880. " b'Southampton'], dtype=object)>, 'alone': <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'y', b'y', b'y', b'y', b'n'], dtype=object)>}\n",
  881. "--------------------------------------------------\n",
  882. "tf.Tensor([0 0 0 0 0], shape=(5,), dtype=int64)\n"
  883. ]
  884. }
  885. ],
  886. "source": [
  887. "for x, y in train_dataset.take(1):\n",
  888. " print(x)\n",
  889. " print('-'*50)\n",
  890. " print(y)"
  891. ]
  892. },
  893. {
  894. "cell_type": "markdown",
  895. "metadata": {},
  896. "source": [
  897. "# 通过feature_columns把离散型(非数值类型)tensor变为数值类型"
  898. ]
  899. },
  900. {
  901. "cell_type": "code",
  902. "execution_count": 23,
  903. "metadata": {},
  904. "outputs": [
  905. {
  906. "name": "stdout",
  907. "output_type": "stream",
  908. "text": [
  909. "--------------------------------------------------\n",
  910. "WARNING:tensorflow:Layer dense_features is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n",
  911. "\n",
  912. "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n",
  913. "\n",
  914. "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n",
  915. "\n",
  916. "[[19.]\n",
  917. " [ 9.]\n",
  918. " [28.]\n",
  919. " [24.]\n",
  920. " [20.]]\n",
  921. "WARNING:tensorflow:Layer dense_features_1 is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n",
  922. "\n",
  923. "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n",
  924. "\n",
  925. "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n",
  926. "\n",
  927. "tf.Tensor(\n",
  928. "[[1. 0.]\n",
  929. " [1. 0.]\n",
  930. " [0. 1.]\n",
  931. " [1. 0.]\n",
  932. " [1. 0.]], shape=(5, 2), dtype=float32)\n"
  933. ]
  934. }
  935. ],
  936. "source": [
  937. "# print(feature_columns)\n",
  938. "print('-'*50)\n",
  939. "# keras.layers.DenseFeature\n",
  940. "# A layer that produces a dense Tensor based on given feature_columns\n",
  941. "for x, y in train_dataset.take(1):\n",
  942. " #特征类型\n",
  943. " age_column = feature_columns[7]\n",
  944. " gender_column = feature_columns[0]\n",
  945. " #DenseFeatures进行转换\n",
  946. " print(keras.layers.DenseFeatures(age_column)(x).numpy())\n",
  947. " print(keras.layers.DenseFeatures(gender_column)(x)) #变为one-host编码"
  948. ]
  949. },
  950. {
  951. "cell_type": "code",
  952. "execution_count": 24,
  953. "metadata": {},
  954. "outputs": [
  955. {
  956. "name": "stdout",
  957. "output_type": "stream",
  958. "text": [
  959. "WARNING:tensorflow:Layer dense_features_2 is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n",
  960. "\n",
  961. "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n",
  962. "\n",
  963. "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n",
  964. "\n",
  965. "tf.Tensor(\n",
  966. "[[ 58. 1. 0. 0. 1. 0. 0. 1.\n",
  967. " 0. 0. 0. 0. 0. 0. 1. 0.\n",
  968. " 0. 0. 153.4625 0. 1. 0. 0. 0.\n",
  969. " 0. 0. 0. 1. 0. 0. 0. 0.\n",
  970. " 0. 1. ]\n",
  971. " [ 36. 1. 0. 0. 0. 1. 1. 0.\n",
  972. " 0. 0. 0. 0. 0. 0. 1. 0.\n",
  973. " 0. 0. 27.75 1. 0. 0. 0. 0.\n",
  974. " 0. 0. 0. 0. 1. 0. 0. 0.\n",
  975. " 1. 0. ]\n",
  976. " [ 42. 1. 0. 0. 0. 1. 1. 0.\n",
  977. " 0. 0. 0. 0. 0. 0. 1. 0.\n",
  978. " 0. 0. 27. 1. 0. 0. 0. 0.\n",
  979. " 0. 0. 1. 0. 0. 0. 0. 0.\n",
  980. " 1. 0. ]\n",
  981. " [ 3. 1. 0. 0. 0. 1. 1. 0.\n",
  982. " 0. 0. 0. 0. 0. 0. 1. 0.\n",
  983. " 0. 0. 18.75 1. 0. 0. 0. 0.\n",
  984. " 0. 0. 0. 1. 0. 0. 0. 0.\n",
  985. " 1. 0. ]\n",
  986. " [ 49. 0. 1. 1. 0. 0. 1. 0.\n",
  987. " 0. 0. 0. 0. 0. 0. 1. 0.\n",
  988. " 0. 0. 0. 0. 1. 0. 0. 0.\n",
  989. " 0. 0. 1. 0. 0. 0. 0. 0.\n",
  990. " 1. 0. ]], shape=(5, 34), dtype=float32)\n"
  991. ]
  992. }
  993. ],
  994. "source": [
  995. "# keras.layers.DenseFeature\n",
  996. "for x, y in train_dataset.take(1):#拿第一个batch\n",
  997. " print(keras.layers.DenseFeatures(feature_columns)(x))"
  998. ]
  999. },
  1000. {
  1001. "cell_type": "code",
  1002. "execution_count": 18,
  1003. "metadata": {},
  1004. "outputs": [],
  1005. "source": [
  1006. "#DenseFeatures可以直接将非数值类型特征转为数值类型特征\n",
  1007. "model = keras.models.Sequential([\n",
  1008. " keras.layers.DenseFeatures(feature_columns),#这里传入feature_columns,直接处理所有特征\n",
  1009. " keras.layers.Dense(100, activation='relu'),\n",
  1010. " keras.layers.Dense(100, activation='relu'),\n",
  1011. " keras.layers.Dense(2, activation='softmax'),\n",
  1012. "])\n",
  1013. "model.compile(loss='sparse_categorical_crossentropy',\n",
  1014. " optimizer = keras.optimizers.SGD(lr=0.005),metrics=['accuracy'])\n"
  1015. ]
  1016. },
  1017. {
  1018. "cell_type": "code",
  1019. "execution_count": 19,
  1020. "metadata": {},
  1021. "outputs": [
  1022. {
  1023. "data": {
  1024. "text/plain": [
  1025. "[<tensorflow.python.feature_column.dense_features_v2.DenseFeatures at 0x7f5da04fd828>,\n",
  1026. " <tensorflow.python.keras.layers.core.Dense at 0x7f5da04fdfd0>,\n",
  1027. " <tensorflow.python.keras.layers.core.Dense at 0x7f5da052c278>,\n",
  1028. " <tensorflow.python.keras.layers.core.Dense at 0x7f5da052c4e0>]"
  1029. ]
  1030. },
  1031. "execution_count": 19,
  1032. "metadata": {},
  1033. "output_type": "execute_result"
  1034. }
  1035. ],
  1036. "source": [
  1037. "model.layers"
  1038. ]
  1039. },
  1040. {
  1041. "cell_type": "code",
  1042. "execution_count": 31,
  1043. "metadata": {},
  1044. "outputs": [],
  1045. "source": [
  1046. "# model.summary() 使用DenseFeatures,没办法使用summary\n",
  1047. "# model.variables"
  1048. ]
  1049. },
  1050. {
  1051. "cell_type": "code",
  1052. "execution_count": 32,
  1053. "metadata": {},
  1054. "outputs": [
  1055. {
  1056. "data": {
  1057. "text/plain": [
  1058. "19.90625"
  1059. ]
  1060. },
  1061. "execution_count": 32,
  1062. "metadata": {},
  1063. "output_type": "execute_result"
  1064. }
  1065. ],
  1066. "source": [
  1067. "637/32"
  1068. ]
  1069. },
  1070. {
  1071. "cell_type": "code",
  1072. "execution_count": 33,
  1073. "metadata": {
  1074. "collapsed": true
  1075. },
  1076. "outputs": [
  1077. {
  1078. "name": "stdout",
  1079. "output_type": "stream",
  1080. "text": [
  1081. "Epoch 1/100\n",
  1082. "WARNING:tensorflow:Layer dense_features_3 is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because it's dtype defaults to floatx.\n",
  1083. "\n",
  1084. "If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.\n",
  1085. "\n",
  1086. "To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.\n",
  1087. "\n",
  1088. "19/19 [==============================] - 1s 59ms/step - loss: 1.6348 - accuracy: 0.5658 - val_loss: 0.7247 - val_accuracy: 0.6641\n",
  1089. "Epoch 2/100\n",
  1090. "19/19 [==============================] - 0s 6ms/step - loss: 0.9808 - accuracy: 0.6020 - val_loss: 0.6643 - val_accuracy: 0.7070\n",
  1091. "Epoch 3/100\n",
  1092. "19/19 [==============================] - 0s 6ms/step - loss: 0.6924 - accuracy: 0.6776 - val_loss: 0.6271 - val_accuracy: 0.6328\n",
  1093. "Epoch 4/100\n",
  1094. "19/19 [==============================] - 0s 6ms/step - loss: 0.6906 - accuracy: 0.6875 - val_loss: 0.6064 - val_accuracy: 0.6836\n",
  1095. "Epoch 5/100\n",
  1096. "19/19 [==============================] - 0s 4ms/step - loss: 0.6415 - accuracy: 0.6727 - val_loss: 0.5961 - val_accuracy: 0.7148\n",
  1097. "Epoch 6/100\n",
  1098. "19/19 [==============================] - 0s 7ms/step - loss: 0.6482 - accuracy: 0.6760 - val_loss: 0.6056 - val_accuracy: 0.7031\n",
  1099. "Epoch 7/100\n",
  1100. "19/19 [==============================] - 0s 6ms/step - loss: 0.6552 - accuracy: 0.6497 - val_loss: 0.6448 - val_accuracy: 0.6602\n",
  1101. "Epoch 8/100\n",
  1102. "19/19 [==============================] - 0s 7ms/step - loss: 0.5845 - accuracy: 0.6875 - val_loss: 0.6202 - val_accuracy: 0.6562\n",
  1103. "Epoch 9/100\n",
  1104. "19/19 [==============================] - 0s 7ms/step - loss: 0.6384 - accuracy: 0.6464 - val_loss: 0.5930 - val_accuracy: 0.7109\n",
  1105. "Epoch 10/100\n",
  1106. "19/19 [==============================] - 0s 6ms/step - loss: 0.6100 - accuracy: 0.6875 - val_loss: 0.6665 - val_accuracy: 0.6289\n",
  1107. "Epoch 11/100\n",
  1108. "19/19 [==============================] - 0s 9ms/step - loss: 0.6134 - accuracy: 0.6612 - val_loss: 0.5899 - val_accuracy: 0.7031\n",
  1109. "Epoch 12/100\n",
  1110. "19/19 [==============================] - 0s 16ms/step - loss: 0.6154 - accuracy: 0.6776 - val_loss: 0.5820 - val_accuracy: 0.7031\n",
  1111. "Epoch 13/100\n",
  1112. "19/19 [==============================] - 0s 7ms/step - loss: 0.5937 - accuracy: 0.6941 - val_loss: 0.6564 - val_accuracy: 0.6133\n",
  1113. "Epoch 14/100\n",
  1114. "19/19 [==============================] - 0s 8ms/step - loss: 0.6062 - accuracy: 0.6875 - val_loss: 0.5792 - val_accuracy: 0.7031\n",
  1115. "Epoch 15/100\n",
  1116. "19/19 [==============================] - 0s 6ms/step - loss: 0.5699 - accuracy: 0.7056 - val_loss: 0.5909 - val_accuracy: 0.6797\n",
  1117. "Epoch 16/100\n",
  1118. "19/19 [==============================] - 0s 7ms/step - loss: 0.5868 - accuracy: 0.6760 - val_loss: 0.6631 - val_accuracy: 0.6562\n",
  1119. "Epoch 17/100\n",
  1120. "19/19 [==============================] - 0s 8ms/step - loss: 0.6175 - accuracy: 0.6793 - val_loss: 0.5750 - val_accuracy: 0.7109\n",
  1121. "Epoch 18/100\n",
  1122. "19/19 [==============================] - 0s 7ms/step - loss: 0.6196 - accuracy: 0.6562 - val_loss: 0.5981 - val_accuracy: 0.6641\n",
  1123. "Epoch 19/100\n",
  1124. "19/19 [==============================] - 0s 7ms/step - loss: 0.5879 - accuracy: 0.6974 - val_loss: 0.5780 - val_accuracy: 0.6992\n",
  1125. "Epoch 20/100\n",
  1126. "19/19 [==============================] - 0s 7ms/step - loss: 0.5752 - accuracy: 0.7171 - val_loss: 0.5764 - val_accuracy: 0.7148\n",
  1127. "Epoch 21/100\n",
  1128. "19/19 [==============================] - 0s 7ms/step - loss: 0.5970 - accuracy: 0.6924 - val_loss: 0.6356 - val_accuracy: 0.6328\n",
  1129. "Epoch 22/100\n",
  1130. "19/19 [==============================] - 0s 6ms/step - loss: 0.5937 - accuracy: 0.7089 - val_loss: 0.5692 - val_accuracy: 0.7227\n",
  1131. "Epoch 23/100\n",
  1132. "19/19 [==============================] - 0s 8ms/step - loss: 0.5777 - accuracy: 0.7056 - val_loss: 0.5817 - val_accuracy: 0.7031\n",
  1133. "Epoch 24/100\n",
  1134. "19/19 [==============================] - 0s 7ms/step - loss: 0.5804 - accuracy: 0.6957 - val_loss: 0.5662 - val_accuracy: 0.7188\n",
  1135. "Epoch 25/100\n",
  1136. "19/19 [==============================] - 0s 6ms/step - loss: 0.5770 - accuracy: 0.7072 - val_loss: 0.5827 - val_accuracy: 0.7109\n",
  1137. "Epoch 26/100\n",
  1138. "19/19 [==============================] - 0s 6ms/step - loss: 0.5817 - accuracy: 0.7105 - val_loss: 0.5854 - val_accuracy: 0.6797\n",
  1139. "Epoch 27/100\n",
  1140. "19/19 [==============================] - 0s 8ms/step - loss: 0.5823 - accuracy: 0.7039 - val_loss: 0.5649 - val_accuracy: 0.6992\n",
  1141. "Epoch 28/100\n",
  1142. "19/19 [==============================] - 0s 7ms/step - loss: 0.5729 - accuracy: 0.7270 - val_loss: 0.5539 - val_accuracy: 0.7227\n",
  1143. "Epoch 29/100\n",
  1144. "19/19 [==============================] - 0s 8ms/step - loss: 0.5694 - accuracy: 0.6974 - val_loss: 0.5540 - val_accuracy: 0.7188\n",
  1145. "Epoch 30/100\n",
  1146. "19/19 [==============================] - 0s 5ms/step - loss: 0.5706 - accuracy: 0.7270 - val_loss: 0.5607 - val_accuracy: 0.6953\n",
  1147. "Epoch 31/100\n",
  1148. "19/19 [==============================] - 0s 10ms/step - loss: 0.5768 - accuracy: 0.7253 - val_loss: 0.5836 - val_accuracy: 0.6484\n",
  1149. "Epoch 32/100\n",
  1150. "19/19 [==============================] - 0s 13ms/step - loss: 0.5717 - accuracy: 0.7056 - val_loss: 0.5533 - val_accuracy: 0.7109\n",
  1151. "Epoch 33/100\n",
  1152. "19/19 [==============================] - 0s 6ms/step - loss: 0.5645 - accuracy: 0.7122 - val_loss: 0.5806 - val_accuracy: 0.6836\n",
  1153. "Epoch 34/100\n",
  1154. "19/19 [==============================] - 0s 5ms/step - loss: 0.5564 - accuracy: 0.7352 - val_loss: 0.5539 - val_accuracy: 0.7109\n",
  1155. "Epoch 35/100\n",
  1156. "19/19 [==============================] - 0s 5ms/step - loss: 0.5838 - accuracy: 0.7138 - val_loss: 0.5531 - val_accuracy: 0.7266\n",
  1157. "Epoch 36/100\n",
  1158. "19/19 [==============================] - 0s 6ms/step - loss: 0.5649 - accuracy: 0.7204 - val_loss: 0.5561 - val_accuracy: 0.7344\n",
  1159. "Epoch 37/100\n",
  1160. "19/19 [==============================] - 0s 4ms/step - loss: 0.5630 - accuracy: 0.7303 - val_loss: 0.5460 - val_accuracy: 0.7305\n",
  1161. "Epoch 38/100\n",
  1162. "19/19 [==============================] - 0s 10ms/step - loss: 0.5529 - accuracy: 0.7352 - val_loss: 0.5460 - val_accuracy: 0.7188\n",
  1163. "Epoch 39/100\n",
  1164. "19/19 [==============================] - 0s 9ms/step - loss: 0.5879 - accuracy: 0.7105 - val_loss: 0.5653 - val_accuracy: 0.7109\n",
  1165. "Epoch 40/100\n",
  1166. "19/19 [==============================] - 0s 7ms/step - loss: 0.5764 - accuracy: 0.7155 - val_loss: 0.5658 - val_accuracy: 0.7031\n",
  1167. "Epoch 41/100\n",
  1168. "19/19 [==============================] - 0s 6ms/step - loss: 0.5607 - accuracy: 0.7105 - val_loss: 0.5686 - val_accuracy: 0.7188\n",
  1169. "Epoch 42/100\n",
  1170. "19/19 [==============================] - 0s 9ms/step - loss: 0.6006 - accuracy: 0.7138 - val_loss: 0.5411 - val_accuracy: 0.7188\n",
  1171. "Epoch 43/100\n",
  1172. "19/19 [==============================] - 0s 5ms/step - loss: 0.5600 - accuracy: 0.7220 - val_loss: 0.5581 - val_accuracy: 0.7227\n",
  1173. "Epoch 44/100\n",
  1174. "19/19 [==============================] - 0s 8ms/step - loss: 0.5509 - accuracy: 0.7516 - val_loss: 0.5548 - val_accuracy: 0.7305\n",
  1175. "Epoch 45/100\n",
  1176. "19/19 [==============================] - 0s 7ms/step - loss: 0.5581 - accuracy: 0.7286 - val_loss: 0.5423 - val_accuracy: 0.7266\n",
  1177. "Epoch 46/100\n",
  1178. "19/19 [==============================] - 0s 5ms/step - loss: 0.5403 - accuracy: 0.7533 - val_loss: 0.5361 - val_accuracy: 0.7227\n",
  1179. "Epoch 47/100\n",
  1180. "19/19 [==============================] - 0s 7ms/step - loss: 0.5738 - accuracy: 0.7138 - val_loss: 0.5308 - val_accuracy: 0.7305\n",
  1181. "Epoch 48/100\n",
  1182. "19/19 [==============================] - 0s 11ms/step - loss: 0.5554 - accuracy: 0.7319 - val_loss: 0.5390 - val_accuracy: 0.7266\n",
  1183. "Epoch 49/100\n",
  1184. "19/19 [==============================] - 0s 10ms/step - loss: 0.5614 - accuracy: 0.7122 - val_loss: 0.5323 - val_accuracy: 0.7266\n",
  1185. "Epoch 50/100\n",
  1186. "19/19 [==============================] - 0s 7ms/step - loss: 0.5808 - accuracy: 0.7007 - val_loss: 0.5294 - val_accuracy: 0.7383\n",
  1187. "Epoch 51/100\n",
  1188. "19/19 [==============================] - 0s 7ms/step - loss: 0.5450 - accuracy: 0.7270 - val_loss: 0.6058 - val_accuracy: 0.6523\n",
  1189. "Epoch 52/100\n",
  1190. "19/19 [==============================] - 0s 6ms/step - loss: 0.5535 - accuracy: 0.7434 - val_loss: 0.5364 - val_accuracy: 0.7266\n",
  1191. "Epoch 53/100\n",
  1192. "19/19 [==============================] - 0s 7ms/step - loss: 0.5363 - accuracy: 0.7500 - val_loss: 0.5505 - val_accuracy: 0.7266\n",
  1193. "Epoch 54/100\n",
  1194. "19/19 [==============================] - 0s 11ms/step - loss: 0.5521 - accuracy: 0.7401 - val_loss: 0.5354 - val_accuracy: 0.7227\n",
  1195. "Epoch 55/100\n",
  1196. "19/19 [==============================] - 0s 12ms/step - loss: 0.5175 - accuracy: 0.7648 - val_loss: 0.5477 - val_accuracy: 0.7266\n",
  1197. "Epoch 56/100\n",
  1198. "19/19 [==============================] - 0s 10ms/step - loss: 0.5386 - accuracy: 0.7484 - val_loss: 0.5433 - val_accuracy: 0.7344\n",
  1199. "Epoch 57/100\n",
  1200. "19/19 [==============================] - 0s 8ms/step - loss: 0.5678 - accuracy: 0.7007 - val_loss: 0.5391 - val_accuracy: 0.7344\n",
  1201. "Epoch 58/100\n",
  1202. "19/19 [==============================] - 0s 8ms/step - loss: 0.5226 - accuracy: 0.7434 - val_loss: 0.5691 - val_accuracy: 0.7266\n",
  1203. "Epoch 59/100\n",
  1204. "19/19 [==============================] - 0s 6ms/step - loss: 0.5508 - accuracy: 0.7368 - val_loss: 0.5308 - val_accuracy: 0.7383\n",
  1205. "Epoch 60/100\n",
  1206. "19/19 [==============================] - 0s 8ms/step - loss: 0.5464 - accuracy: 0.7352 - val_loss: 0.5257 - val_accuracy: 0.7383\n",
  1207. "Epoch 61/100\n",
  1208. "19/19 [==============================] - 0s 9ms/step - loss: 0.5719 - accuracy: 0.7188 - val_loss: 0.5185 - val_accuracy: 0.7383\n",
  1209. "Epoch 62/100\n",
  1210. "19/19 [==============================] - 0s 8ms/step - loss: 0.5675 - accuracy: 0.7352 - val_loss: 0.5203 - val_accuracy: 0.7305\n",
  1211. "Epoch 63/100\n",
  1212. "19/19 [==============================] - 0s 7ms/step - loss: 0.5375 - accuracy: 0.7500 - val_loss: 0.5256 - val_accuracy: 0.7422\n",
  1213. "Epoch 64/100\n",
  1214. "19/19 [==============================] - 0s 6ms/step - loss: 0.5197 - accuracy: 0.7467 - val_loss: 0.5179 - val_accuracy: 0.7266\n",
  1215. "Epoch 65/100\n",
  1216. "19/19 [==============================] - 0s 7ms/step - loss: 0.5418 - accuracy: 0.7303 - val_loss: 0.5151 - val_accuracy: 0.7305\n",
  1217. "Epoch 66/100\n",
  1218. "19/19 [==============================] - 0s 7ms/step - loss: 0.5415 - accuracy: 0.7319 - val_loss: 0.5171 - val_accuracy: 0.7344\n",
  1219. "Epoch 67/100\n",
  1220. "19/19 [==============================] - 0s 6ms/step - loss: 0.5446 - accuracy: 0.7467 - val_loss: 0.6223 - val_accuracy: 0.6797\n",
  1221. "Epoch 68/100\n",
  1222. "19/19 [==============================] - 0s 6ms/step - loss: 0.5550 - accuracy: 0.7303 - val_loss: 0.5630 - val_accuracy: 0.7305\n",
  1223. "Epoch 69/100\n",
  1224. "19/19 [==============================] - 0s 6ms/step - loss: 0.5047 - accuracy: 0.7632 - val_loss: 0.5114 - val_accuracy: 0.7422\n",
  1225. "Epoch 70/100\n",
  1226. "19/19 [==============================] - 0s 11ms/step - loss: 0.5578 - accuracy: 0.7434 - val_loss: 0.5562 - val_accuracy: 0.7266\n",
  1227. "Epoch 71/100\n",
  1228. "19/19 [==============================] - 0s 7ms/step - loss: 0.5290 - accuracy: 0.7368 - val_loss: 0.5365 - val_accuracy: 0.7422\n",
  1229. "Epoch 72/100\n",
  1230. "19/19 [==============================] - 0s 6ms/step - loss: 0.5085 - accuracy: 0.7484 - val_loss: 0.5249 - val_accuracy: 0.7383\n",
  1231. "Epoch 73/100\n",
  1232. "19/19 [==============================] - 0s 7ms/step - loss: 0.5272 - accuracy: 0.7451 - val_loss: 0.5063 - val_accuracy: 0.7695\n",
  1233. "Epoch 74/100\n",
  1234. "19/19 [==============================] - 0s 7ms/step - loss: 0.5289 - accuracy: 0.7599 - val_loss: 0.5061 - val_accuracy: 0.7539\n",
  1235. "Epoch 75/100\n",
  1236. "19/19 [==============================] - 0s 7ms/step - loss: 0.5288 - accuracy: 0.7566 - val_loss: 0.5457 - val_accuracy: 0.7148\n",
  1237. "Epoch 76/100\n",
  1238. "19/19 [==============================] - 0s 5ms/step - loss: 0.5457 - accuracy: 0.7582 - val_loss: 0.5351 - val_accuracy: 0.7227\n",
  1239. "Epoch 77/100\n",
  1240. "19/19 [==============================] - 0s 6ms/step - loss: 0.5110 - accuracy: 0.7599 - val_loss: 0.5524 - val_accuracy: 0.7227\n",
  1241. "Epoch 78/100\n",
  1242. "19/19 [==============================] - 0s 7ms/step - loss: 0.5156 - accuracy: 0.7401 - val_loss: 0.5335 - val_accuracy: 0.7305\n",
  1243. "Epoch 79/100\n",
  1244. "19/19 [==============================] - 0s 7ms/step - loss: 0.5466 - accuracy: 0.7188 - val_loss: 0.5024 - val_accuracy: 0.7500\n",
  1245. "Epoch 80/100\n",
  1246. "19/19 [==============================] - 0s 9ms/step - loss: 0.5362 - accuracy: 0.7352 - val_loss: 0.5054 - val_accuracy: 0.7695\n",
  1247. "Epoch 81/100\n",
  1248. "19/19 [==============================] - 0s 7ms/step - loss: 0.5526 - accuracy: 0.7204 - val_loss: 0.5390 - val_accuracy: 0.7227\n",
  1249. "Epoch 82/100\n",
  1250. "19/19 [==============================] - 0s 8ms/step - loss: 0.4990 - accuracy: 0.7714 - val_loss: 0.5243 - val_accuracy: 0.7539\n",
  1251. "Epoch 83/100\n",
  1252. "19/19 [==============================] - 0s 8ms/step - loss: 0.4918 - accuracy: 0.7961 - val_loss: 0.5003 - val_accuracy: 0.7500\n",
  1253. "Epoch 84/100\n",
  1254. "19/19 [==============================] - 0s 6ms/step - loss: 0.5606 - accuracy: 0.7171 - val_loss: 0.5543 - val_accuracy: 0.7188\n",
  1255. "Epoch 85/100\n",
  1256. "19/19 [==============================] - 0s 7ms/step - loss: 0.5410 - accuracy: 0.7451 - val_loss: 0.5011 - val_accuracy: 0.7539\n",
  1257. "Epoch 86/100\n",
  1258. "19/19 [==============================] - 0s 7ms/step - loss: 0.5198 - accuracy: 0.7434 - val_loss: 0.5084 - val_accuracy: 0.7305\n",
  1259. "Epoch 87/100\n",
  1260. "19/19 [==============================] - 0s 6ms/step - loss: 0.5142 - accuracy: 0.7516 - val_loss: 0.5121 - val_accuracy: 0.7578\n",
  1261. "Epoch 88/100\n",
  1262. "19/19 [==============================] - 0s 6ms/step - loss: 0.5621 - accuracy: 0.7253 - val_loss: 0.5153 - val_accuracy: 0.7422\n",
  1263. "Epoch 89/100\n",
  1264. "19/19 [==============================] - 0s 8ms/step - loss: 0.4897 - accuracy: 0.7747 - val_loss: 0.4928 - val_accuracy: 0.7539\n",
  1265. "Epoch 90/100\n",
  1266. "19/19 [==============================] - 0s 10ms/step - loss: 0.5021 - accuracy: 0.7829 - val_loss: 0.4975 - val_accuracy: 0.7461\n",
  1267. "Epoch 91/100\n",
  1268. "19/19 [==============================] - 0s 6ms/step - loss: 0.5165 - accuracy: 0.7599 - val_loss: 0.5363 - val_accuracy: 0.7070\n",
  1269. "Epoch 92/100\n",
  1270. "19/19 [==============================] - 0s 13ms/step - loss: 0.5383 - accuracy: 0.7467 - val_loss: 0.4968 - val_accuracy: 0.7539\n",
  1271. "Epoch 93/100\n",
  1272. "19/19 [==============================] - 0s 6ms/step - loss: 0.5140 - accuracy: 0.7582 - val_loss: 0.5597 - val_accuracy: 0.7266\n",
  1273. "Epoch 94/100\n",
  1274. "19/19 [==============================] - 0s 7ms/step - loss: 0.5385 - accuracy: 0.7566 - val_loss: 0.4961 - val_accuracy: 0.7656\n",
  1275. "Epoch 95/100\n",
  1276. "19/19 [==============================] - 0s 9ms/step - loss: 0.5342 - accuracy: 0.7434 - val_loss: 0.5080 - val_accuracy: 0.7188\n",
  1277. "Epoch 96/100\n",
  1278. "19/19 [==============================] - 0s 7ms/step - loss: 0.5023 - accuracy: 0.7664 - val_loss: 0.5634 - val_accuracy: 0.6680\n",
  1279. "Epoch 97/100\n",
  1280. "19/19 [==============================] - 0s 5ms/step - loss: 0.5102 - accuracy: 0.7928 - val_loss: 0.5013 - val_accuracy: 0.7422\n",
  1281. "Epoch 98/100\n",
  1282. "19/19 [==============================] - 0s 10ms/step - loss: 0.5202 - accuracy: 0.7368 - val_loss: 0.4993 - val_accuracy: 0.7578\n",
  1283. "Epoch 99/100\n",
  1284. "19/19 [==============================] - 0s 7ms/step - loss: 0.4922 - accuracy: 0.7878 - val_loss: 0.5875 - val_accuracy: 0.7148\n",
  1285. "Epoch 100/100\n",
  1286. "19/19 [==============================] - 0s 5ms/step - loss: 0.5336 - accuracy: 0.7451 - val_loss: 0.5038 - val_accuracy: 0.7578\n"
  1287. ]
  1288. }
  1289. ],
  1290. "source": [
  1291. "# 1. model.fit 第一种方式\n",
  1292. "# 2. model -> estimator -> train 第二种\n",
  1293. "\n",
  1294. "train_dataset = make_dataset(train_df, y_train, epochs = 100)\n",
  1295. "eval_dataset = make_dataset(eval_df, y_eval, epochs = 100, shuffle = False) #验证集\n",
  1296. "#train_dataset里边包含了特征,目标,feature_columns只处理特征\n",
  1297. "history = model.fit(train_dataset,\n",
  1298. " validation_data = eval_dataset,\n",
  1299. " steps_per_epoch = 19,\n",
  1300. " validation_steps = 8,\n",
  1301. " epochs = 100)"
  1302. ]
  1303. },
  1304. {
  1305. "cell_type": "code",
  1306. "execution_count": 37,
  1307. "metadata": {},
  1308. "outputs": [
  1309. {
  1310. "name": "stdout",
  1311. "output_type": "stream",
  1312. "text": [
  1313. "Model: \"sequential\"\n",
  1314. "_________________________________________________________________\n",
  1315. "Layer (type) Output Shape Param # \n",
  1316. "=================================================================\n",
  1317. "dense_features_3 (DenseFeatu multiple 0 \n",
  1318. "_________________________________________________________________\n",
  1319. "dense (Dense) multiple 3500 \n",
  1320. "_________________________________________________________________\n",
  1321. "dense_1 (Dense) multiple 10100 \n",
  1322. "_________________________________________________________________\n",
  1323. "dense_2 (Dense) multiple 202 \n",
  1324. "=================================================================\n",
  1325. "Total params: 13,802\n",
  1326. "Trainable params: 13,802\n",
  1327. "Non-trainable params: 0\n",
  1328. "_________________________________________________________________\n"
  1329. ]
  1330. }
  1331. ],
  1332. "source": [
  1333. "model.summary()"
  1334. ]
  1335. },
  1336. {
  1337. "cell_type": "code",
  1338. "execution_count": 36,
  1339. "metadata": {
  1340. "scrolled": false
  1341. },
  1342. "outputs": [
  1343. {
  1344. "name": "stdout",
  1345. "output_type": "stream",
  1346. "text": [
  1347. "INFO:tensorflow:Using default config.\n",
  1348. "WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmprqx91llq\n",
  1349. "INFO:tensorflow:Using the Keras model provided.\n",
  1350. "WARNING:tensorflow:You are creating an Estimator from a Keras model manually subclassed from `Model`, that was already called on some inputs (and thus already had weights). We are currently unable to preserve the model's state (its weights) as part of the estimator in this case. Be warned that the estimator has been created using a freshly initialized version of your model.\n",
  1351. "Note that this doesn't affect the state of the model instance you passed as `keras_model` argument.\n",
  1352. "INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmprqx91llq', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true\n",
  1353. "graph_options {\n",
  1354. " rewrite_options {\n",
  1355. " meta_optimizer_iterations: ONE\n",
  1356. " }\n",
  1357. "}\n",
  1358. ", '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}\n",
  1359. "INFO:tensorflow:Calling model_fn.\n"
  1360. ]
  1361. },
  1362. {
  1363. "ename": "ValueError",
  1364. "evalue": "Unexpectedly found an instance of type `<class 'dict'>`. Expected a symbolic tensor instance.",
  1365. "output_type": "error",
  1366. "traceback": [
  1367. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  1368. "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
  1369. "\u001b[0;32m<ipython-input-36-11b6f07b1baa>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m#是否是上面用了dict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m estimator.train(input_fn = lambda : make_dataset(\n\u001b[0;32m----> 7\u001b[0;31m train_df, y_train, epochs=100),steps=1)\n\u001b[0m",
  1370. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/estimator.py\u001b[0m in \u001b[0;36mtrain\u001b[0;34m(self, input_fn, hooks, steps, max_steps, saving_listeners)\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 348\u001b[0m \u001b[0msaving_listeners\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_check_listeners_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msaving_listeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 349\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaving_listeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 350\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Loss for final step: %s.'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 351\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1371. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/estimator.py\u001b[0m in \u001b[0;36m_train_model\u001b[0;34m(self, input_fn, hooks, saving_listeners)\u001b[0m\n\u001b[1;32m 1180\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_model_distributed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaving_listeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1181\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1182\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_model_default\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaving_listeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1183\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1184\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_train_model_default\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaving_listeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1372. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/estimator.py\u001b[0m in \u001b[0;36m_train_model_default\u001b[0;34m(self, input_fn, hooks, saving_listeners)\u001b[0m\n\u001b[1;32m 1209\u001b[0m \u001b[0mworker_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_hooks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1210\u001b[0m estimator_spec = self._call_model_fn(features, labels, ModeKeys.TRAIN,\n\u001b[0;32m-> 1211\u001b[0;31m self.config)\n\u001b[0m\u001b[1;32m 1212\u001b[0m \u001b[0mglobal_step_tensor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mv1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_global_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1213\u001b[0m return self._train_with_estimator_spec(estimator_spec, worker_hooks,\n",
  1373. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/estimator.py\u001b[0m in \u001b[0;36m_call_model_fn\u001b[0;34m(self, features, labels, mode, config)\u001b[0m\n\u001b[1;32m 1168\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1169\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Calling model_fn.'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1170\u001b[0;31m \u001b[0mmodel_fn_results\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_model_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1171\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Done calling model_fn.'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  1374. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/keras.py\u001b[0m in \u001b[0;36mmodel_fn\u001b[0;34m(features, labels, mode)\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[0mfeatures\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 286\u001b[0;31m optimizer_config=optimizer_config)\n\u001b[0m\u001b[1;32m 287\u001b[0m \u001b[0mmodel_output_names\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;31m# We need to make sure that the output names of the last layer in the model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1375. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/keras.py\u001b[0m in \u001b[0;36m_clone_and_build_model\u001b[0;34m(mode, keras_model, custom_objects, features, labels, optimizer_config)\u001b[0m\n\u001b[1;32m 222\u001b[0m \u001b[0min_place_reset\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mnot\u001b[0m \u001b[0mkeras_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_is_graph_network\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0moptimizer_iterations\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mglobal_step\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 224\u001b[0;31m optimizer_config=optimizer_config)\n\u001b[0m\u001b[1;32m 225\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 226\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msample_weight_tensors\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1376. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow/python/keras/models.py\u001b[0m in \u001b[0;36mclone_and_build_model\u001b[0;34m(model, input_tensors, target_tensors, custom_objects, compile_clone, in_place_reset, optimizer_iterations, optimizer_config)\u001b[0m\n\u001b[1;32m 651\u001b[0m \u001b[0mclone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclone_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_tensors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_tensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 652\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSequential\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 653\u001b[0;31m \u001b[0mclone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclone_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_tensors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_tensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 654\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;32mnot\u001b[0m \u001b[0mclone\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_is_graph_network\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_build_input_shape\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 655\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecuting_eagerly_outside_functions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1377. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow/python/keras/models.py\u001b[0m in \u001b[0;36mclone_model\u001b[0;34m(model, input_tensors, clone_function)\u001b[0m\n\u001b[1;32m 422\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSequential\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 423\u001b[0m return _clone_sequential_model(\n\u001b[0;32m--> 424\u001b[0;31m model, input_tensors=input_tensors, layer_fn=clone_function)\n\u001b[0m\u001b[1;32m 425\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 426\u001b[0m return _clone_functional_model(\n",
  1378. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow/python/keras/models.py\u001b[0m in \u001b[0;36m_clone_sequential_model\u001b[0;34m(model, input_tensors, layer_fn)\u001b[0m\n\u001b[1;32m 341\u001b[0m \u001b[0minput_tensors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_tensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 342\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgeneric_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_tensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 343\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_keras_tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 344\u001b[0m \u001b[0morigin_layer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_keras_history\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morigin_layer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInputLayer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1379. "\u001b[0;32m~/.virtualenvs/tf_py3/lib/python3.6/site-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36mis_keras_tensor\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 1018\u001b[0m sparse_tensor.SparseTensor, ragged_tensor.RaggedTensor)):\n\u001b[1;32m 1019\u001b[0m raise ValueError('Unexpectedly found an instance of type `' + str(type(x)) +\n\u001b[0;32m-> 1020\u001b[0;31m '`. Expected a symbolic tensor instance.')\n\u001b[0m\u001b[1;32m 1021\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_keras_history'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1022\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  1380. "\u001b[0;31mValueError\u001b[0m: Unexpectedly found an instance of type `<class 'dict'>`. Expected a symbolic tensor instance."
  1381. ]
  1382. }
  1383. ],
  1384. "source": [
  1385. "#第二种方法,TensorFlow的已知bug,等修复\n",
  1386. "estimator = keras.estimator.model_to_estimator(model)\n",
  1387. "# 1. function 输入必须是函数\n",
  1388. "# 2. return 返回值 a. (features, labels) b. dataset -> (feature, label)\n",
  1389. "#是否是上面用了dict\n",
  1390. "estimator.train(input_fn = lambda : make_dataset(\n",
  1391. " train_df, y_train, epochs=100),steps=1)"
  1392. ]
  1393. },
  1394. {
  1395. "cell_type": "code",
  1396. "execution_count": null,
  1397. "metadata": {},
  1398. "outputs": [],
  1399. "source": [
  1400. "m.reset_states()\n",
  1401. "m.update_state([[0, 1], [0, 0]], [[1, 2], [0, 0]],\n",
  1402. " sample_weight=[1, 0])\n",
  1403. "m.result().numpy()"
  1404. ]
  1405. }
  1406. ],
  1407. "metadata": {
  1408. "kernelspec": {
  1409. "display_name": "Python 3",
  1410. "language": "python",
  1411. "name": "python3"
  1412. },
  1413. "language_info": {
  1414. "codemirror_mode": {
  1415. "name": "ipython",
  1416. "version": 3
  1417. },
  1418. "file_extension": ".py",
  1419. "mimetype": "text/x-python",
  1420. "name": "python",
  1421. "nbconvert_exporter": "python",
  1422. "pygments_lexer": "ipython3",
  1423. "version": "3.6.9"
  1424. }
  1425. },
  1426. "nbformat": 4,
  1427. "nbformat_minor": 2
  1428. }

随着人工智能和大数据的发展,任一方面对自动化工具有着一定的需求,在当下疫情防控期间,使用mindspore来实现yolo模型来进行目标检测及语义分割,对视频或图片都可以进行口罩佩戴检测和行人社交距离检测,来对公共场所的疫情防控来实行自动化管理。