این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

داده های ساخت یافته را با ستون های ویژگی طبقه بندی کنید

مشاهده در TensorFlow.org در Google Colab اجرا کنید مشاهده منبع در GitHub دانلود دفترچه یادداشت

این آموزش نحوه طبقه بندی داده های ساخت یافته (به عنوان مثال داده های جدولی در CSV) را نشان می دهد. ما از Keras برای تعریف مدل استفاده خواهیم کرد و ستونها را به عنوان پلی برای ترسیم نقشه از ستونهای CSV به ویژگیهای مورد استفاده برای آموزش مدل استفاده خواهیم کرد. این آموزش شامل کد کامل برای:

  • با استفاده از Pandas یک فایل CSV بارگیری کنید.
  • با استفاده از tf.data یک خط لوله ورودی بسازید و ردیف ها را مرتب کنید .
  • از ستون های CSV به ویژگی های مورد استفاده برای آموزش مدل با استفاده از ستون های ویژگی نقشه برداری کنید.
  • با استفاده از Keras مدلی را بسازید ، آموزش دهید و ارزیابی کنید.

مجموعه داده

ما از یک نسخه ساده شده از مجموعه داده PetFinder استفاده خواهیم کرد. چندین هزار ردیف در CSV وجود دارد. هر سطر یک حیوان خانگی را توصیف می کند ، و هر ستون یک ویژگی را توصیف می کند. ما از این اطلاعات برای پیش بینی سرعت پذیرش حیوان خانگی استفاده خواهیم کرد.

در زیر شرح این مجموعه داده آمده است. توجه داشته باشید که ستون های عددی و دسته ای وجود دارد. یک ستون متن رایگان وجود دارد که ما در این آموزش از آن استفاده نخواهیم کرد.

ستون شرح نوع ویژگی نوع داده
تایپ کنید نوع حیوان (سگ ، گربه) دسته ای رشته
سن سن حیوان خانگی عددی عدد صحیح
نژاد 1 نژاد اصلی حیوان خانگی دسته ای رشته
رنگ 1 رنگ 1 حیوان خانگی دسته ای رشته
رنگ 2 رنگ 2 حیوان خانگی دسته ای رشته
اندازه بلوغ اندازه در بلوغ دسته ای رشته
FurLength طول خز دسته ای رشته
واکسینه شده حیوان خانگی واکسینه شده است دسته ای رشته
عقیم شده حیوان خانگی عقیم شده است دسته ای رشته
سلامتی وضعیت سلامتی دسته ای رشته
هزینه هزینه فرزندخواندگی عددی عدد صحیح
شرح مشخصات مشخصات این حیوان خانگی پیامک رشته
PhotoAmt مجموع عکس های بارگذاری شده برای این حیوان خانگی عددی عدد صحیح
AdoptionSpeed سرعت فرزندخواندگی طبقه بندی عدد صحیح

TensorFlow و کتابخانه های دیگر را وارد کنید

pip install -q sklearn
import numpy as np
import pandas as pd

import tensorflow as tf

from tensorflow import feature_column
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split

برای ایجاد یک فریم داده از Pandas استفاده کنید

Pandas یک کتابخانه پایتون است که دارای بسیاری از ابزارهای مفید برای بارگیری و کار با داده های ساخت یافته است. ما از Pandas برای بارگیری مجموعه داده از یک URL و بارگیری آن در یک فریم داده استفاده خواهیم کرد.

import pathlib

dataset_url = 'http://storage.googleapis.com/download.tensorflow.org/data/petfinder-mini.zip'
csv_file = 'datasets/petfinder-mini/petfinder-mini.csv'

tf.keras.utils.get_file('petfinder_mini.zip', dataset_url,
                        extract=True, cache_dir='.')
dataframe = pd.read_csv(csv_file)
Downloading data from http://storage.googleapis.com/download.tensorflow.org/data/petfinder-mini.zip
1671168/1668792 [==============================] - 0s 0us/step

dataframe.head()

ایجاد متغیر هدف

وظیفه در مجموعه داده اصلی پیش بینی سرعت پذیرش یک حیوان خانگی است (به عنوان مثال در هفته اول ، ماه اول ، سه ماه اول و غیره). بیایید این را برای آموزش ما ساده کنیم. در اینجا ، ما این مسئله را به یک مشکل طبقه بندی باینری تبدیل خواهیم کرد و به سادگی پیش بینی می کنیم که آیا حیوان خانگی پذیرفته شده است یا نه.

0 پس از اصلاح ستون برچسب ، 0 نشان می دهد حیوان خانگی به تصویب نرسیده است ، و 1 نشان می دهد که آن را تصویب نکرده است.

# In the original dataset "4" indicates the pet was not adopted.
dataframe['target'] = np.where(dataframe['AdoptionSpeed']==4, 0, 1)

# Drop un-used columns.
dataframe = dataframe.drop(columns=['AdoptionSpeed', 'Description'])

فریم داده را به قطار ، اعتبار سنجی و آزمون تقسیم کنید

مجموعه داده ای که بارگیری کردیم یک فایل CSV منفرد بود. ما این را به مجموعه های قطار ، اعتبارسنجی و آزمون تقسیم می کنیم.

train, test = train_test_split(dataframe, test_size=0.2)
train, val = train_test_split(train, test_size=0.2)
print(len(train), 'train examples')
print(len(val), 'validation examples')
print(len(test), 'test examples')
7383 train examples
1846 validation examples
2308 test examples

با استفاده از tf.data یک خط لوله ورودی ایجاد کنید

بعد ، ما داده های فریم را با tf.data بسته بندی خواهیم کرد . این به ما امکان می دهد تا از ستون های ویژگی به عنوان پلی برای نقشه برداری از ستون ها در چارچوب داده Pandas به ویژگی های مورد استفاده برای آموزش مدل استفاده کنیم. اگر ما با یک فایل CSV بسیار بزرگ کار می کردیم (آنقدر بزرگ که در حافظه نمی گنجد) ، از tf.data برای خواندن مستقیم آن از روی دیسک استفاده می کنیم. که در این آموزش آورده نشده است.

# A utility method to create a tf.data dataset from a Pandas Dataframe
def df_to_dataset(dataframe, shuffle=True, batch_size=32):
  dataframe = dataframe.copy()
  labels = dataframe.pop('target')
  ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
  if shuffle:
    ds = ds.shuffle(buffer_size=len(dataframe))
  ds = ds.batch(batch_size)
  return ds
batch_size = 5 # A small batch sized is used for demonstration purposes
train_ds = df_to_dataset(train, batch_size=batch_size)
val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

خط لوله ورودی را بفهمید

حالا که خط لوله ورودی را ایجاد کردیم ، بیایید آن را فراخوانی کنیم تا قالب داده ای را که برمی گرداند ببینیم. ما از اندازه دسته ای کوچک برای خوانا بودن خروجی استفاده کرده ایم.

for feature_batch, label_batch in train_ds.take(1):
  print('Every feature:', list(feature_batch.keys()))
  print('A batch of ages:', feature_batch['Age'])
  print('A batch of targets:', label_batch )
Every feature: ['Type', 'Age', 'Breed1', 'Gender', 'Color1', 'Color2', 'MaturitySize', 'FurLength', 'Vaccinated', 'Sterilized', 'Health', 'Fee', 'PhotoAmt']
A batch of ages: tf.Tensor([36 48  3 30 24], shape=(5,), dtype=int64)
A batch of targets: tf.Tensor([1 0 1 0 0], shape=(5,), dtype=int64)

می توانیم ببینیم که مجموعه داده فرهنگ نامه ای از نام ستون ها را باز می گرداند (از dataframe) که از مقادیر ردیف موجود در data data به مقادیر ستون نقشه می زند.

چندین نوع ستون ویژگی را نشان دهید

TensorFlow انواع مختلفی از ستون های ویژگی را فراهم می کند. در این بخش ، ما چندین نوع ستون ویژگی ایجاد خواهیم کرد و نحوه تبدیل آنها از ستون داده را نشان می دهیم.

# We will use this batch to demonstrate several types of feature columns
example_batch = next(iter(train_ds))[0]
# A utility method to create a feature column
# and to transform a batch of data
def demo(feature_column):
  feature_layer = layers.DenseFeatures(feature_column)
  print(feature_layer(example_batch).numpy())

ستون های عددی

خروجی یک ستون ویژگی به ورودی مدل تبدیل می شود (با استفاده از تابع آزمایشی تعریف شده در بالا ، ما می توانیم دقیقاً ببینیم که چگونه هر ستون از داده داده تبدیل می شود). ستون عددی ساده ترین نوع ستون است. این برای نشان دادن ویژگی های ارزشمند واقعی استفاده می شود. هنگام استفاده از این ستون ، مدل شما مقدار ستون را از داده داده بدون تغییر دریافت می کند.

photo_count = feature_column.numeric_column('PhotoAmt')
demo(photo_count)
[[1.]
 [2.]
 [2.]
 [4.]
 [1.]]

در مجموعه داده PetFinder ، بیشتر ستونها از بخش داده طبقه بندی شده اند.

ستون های باکتیزه شده

غالباً ، شما نمی خواهید یک عدد را مستقیماً وارد مدل کنید ، اما در عوض مقدار آن را بر اساس دامنه های عددی به دسته های مختلف تقسیم می کنید. داده های خام را در نظر بگیرید که سن افراد را نشان می دهد. به جای نشان دادن سن به عنوان یک ستون عددی ، ما می توانیم با استفاده از یک ستون باکتیزه شده سن را به چندین سطل تقسیم کنیم. به مقادیر یک داغ زیر توجه کنید که هر ردیف با کدام محدوده سنی مطابقت دارد.

age = feature_column.numeric_column('Age')
age_buckets = feature_column.bucketized_column(age, boundaries=[1, 3, 5])
demo(age_buckets)
[[0. 0. 0. 1.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]]

ستون های دسته بندی شده

در این مجموعه داده ، Type به عنوان یک رشته نشان داده می شود (به عنوان مثال "سگ" یا "گربه"). ما نمی توانیم رشته ها را مستقیماً به یک مدل تغذیه کنیم. در عوض ، ابتدا باید آنها را با مقادیر عددی ترسیم کنیم. ستون های واژگان دسته بندی راهی برای نشان دادن رشته ها به عنوان بردار یک داغ ارائه می دهند (دقیقاً مانند آنچه در بالا با سطل های سنی دیده اید). واژگان می تواند به عنوان یک لیست با استفاده از گذشت categorical_column_with_vocabulary_list یا لود شده از یک فایل با استفاده از categorical_column_with_vocabulary_file .

animal_type = feature_column.categorical_column_with_vocabulary_list(
      'Type', ['Cat', 'Dog'])

animal_type_one_hot = feature_column.indicator_column(animal_type)
demo(animal_type_one_hot)
[[1. 0.]
 [1. 0.]
 [0. 1.]
 [0. 1.]
 [0. 1.]]

جاسازی ستون ها

فرض کنید به جای داشتن فقط چند رشته ممکن ، هزاران (یا بیشتر) مقدار در هر گروه داشته باشیم. به دلایلی ، با افزایش تعداد دسته ها ، آموزش شبکه عصبی با استفاده از رمزگذاری های یکبار غیرممکن می شود. برای غلبه بر این محدودیت می توانیم از ستون تعبیه استفاده کنیم. ستون تعبیه به جای نمایش داده ها به عنوان یک بردار یک داغ از ابعاد مختلف ، آن داده ها را به عنوان بردار متراکم در ابعاد پایین تر نشان می دهد که در آن هر سلول می تواند حاوی هر تعداد ، نه فقط 0 یا 1 باشد. اندازه تعبیه شده ( 8 ، در مثال زیر) پارامتری است که باید تنظیم شود.

# Notice the input to the embedding column is the categorical column
# we previously created
breed1 = feature_column.categorical_column_with_vocabulary_list(
      'Breed1', dataframe.Breed1.unique())
breed1_embedding = feature_column.embedding_column(breed1, dimension=8)
demo(breed1_embedding)
[[ 0.3324157   0.4197986   0.50347906 -0.49933374  0.01970459 -0.2535548
  -0.01637078  0.37853056]
 [ 0.38036337  0.20561606 -0.15727694  0.00184843 -0.19711411  0.46115682
  -0.05730496 -0.35953665]
 [-0.03274023  0.36311874  0.3822702   0.12975089 -0.6652591   0.5957904
   0.49060807 -0.05435312]
 [ 0.44843388 -0.00815179  0.11813674 -0.22067873  0.03251803 -0.3833288
  -0.45184475  0.5564358 ]
 [ 0.44843388 -0.00815179  0.11813674 -0.22067873  0.03251803 -0.3833288
  -0.45184475  0.5564358 ]]

ستون های هاشده

روش دیگر برای نشان دادن یک ستون دسته بندی با تعداد زیادی از مقادیر ، استفاده از یک ستون_ طبقه بندی_با_ سطل_هشک است . این ستون ویژگی یک مقدار هش ورودی را محاسبه می کند ، سپس یکی از سطل های hash_bucket_size برای رمزگذاری یک رشته انتخاب می کند. هنگام استفاده از این ستون ، نیازی به ارائه واژگان ندارید و می توانید تعداد کدهای hash_Betets را به میزان قابل توجهی کوچکتر از تعداد دسته های واقعی برای صرفه جویی در فضا انتخاب کنید.

breed1_hashed = feature_column.categorical_column_with_hash_bucket(
      'Breed1', hash_bucket_size=10)
demo(feature_column.indicator_column(breed1_hashed))
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]

ستون های ویژگی عبور داده شده

ترکیب ویژگی ها به یک ویژگی واحد ، معروف به تلاقی ویژگی ها ، یک مدل را قادر می سازد برای هر ترکیبی از ویژگی ها ، وزن های جداگانه را بیاموزد. در اینجا ، ما ویژگی جدیدی ایجاد خواهیم کرد که ضربدر Age و Type است. توجه داشته باشید که crossed_column جدول کاملی از تمام ترکیبات ممکن را ایجاد نمی کند (که می تواند بسیار بزرگ باشد). در عوض ، توسط یک hashed_column پشتیبانی می شود ، بنابراین می توانید اندازه میز را انتخاب کنید.

crossed_feature = feature_column.crossed_column([age_buckets, animal_type], hash_bucket_size=10)
demo(feature_column.indicator_column(crossed_feature))
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]]

ستون هایی را برای استفاده انتخاب کنید

ما نحوه استفاده از چندین نوع ستون ویژگی را دیده ایم. حال ما از آنها برای آموزش یک مدل استفاده خواهیم کرد. هدف این آموزش نشان دادن کد کامل (به عنوان مثال مکانیک) مورد نیاز برای کار با ستون های ویژگی است. ما چند ستون را برای آموزش خودسرانه مدل زیر انتخاب کرده ایم.

feature_columns = []

# numeric cols
for header in ['PhotoAmt', 'Fee', 'Age']:
  feature_columns.append(feature_column.numeric_column(header))
# bucketized cols
age = feature_column.numeric_column('Age')
age_buckets = feature_column.bucketized_column(age, boundaries=[1, 2, 3, 4, 5])
feature_columns.append(age_buckets)
# indicator_columns
indicator_column_names = ['Type', 'Color1', 'Color2', 'Gender', 'MaturitySize',
                          'FurLength', 'Vaccinated', 'Sterilized', 'Health']
for col_name in indicator_column_names:
  categorical_column = feature_column.categorical_column_with_vocabulary_list(
      col_name, dataframe[col_name].unique())
  indicator_column = feature_column.indicator_column(categorical_column)
  feature_columns.append(indicator_column)
# embedding columns
breed1 = feature_column.categorical_column_with_vocabulary_list(
      'Breed1', dataframe.Breed1.unique())
breed1_embedding = feature_column.embedding_column(breed1, dimension=8)
feature_columns.append(breed1_embedding)
02323e4a6980

یک لایه ویژگی ایجاد کنید

اکنون که ستون های ویژگی خود را تعریف کردیم ، از یک لایه DenseFeatures برای ورود آنها به مدل Keras خود استفاده خواهیم کرد.

feature_layer = tf.keras.layers.DenseFeatures(feature_columns)

پیش از این ، ما برای نشان دادن چگونگی کارکرد ستون های ویژگی ، از یک اندازه کوچک استفاده کردیم. ما یک خط لوله ورودی جدید با اندازه دسته بزرگتر ایجاد می کنیم.

batch_size = 32
train_ds = df_to_dataset(train, batch_size=batch_size)
val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

مدل را ایجاد ، تدوین و آموزش دهید

model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dropout(.1),
  layers.Dense(1)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_ds,
          validation_data=val_ds,
          epochs=10)
Epoch 1/10
WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor, but we receive a <class 'dict'> input: {'Type': <tf.Tensor 'ExpandDims_11:0' shape=(None, 1) dtype=string>, 'Age': <tf.Tensor 'ExpandDims:0' shape=(None, 1) dtype=int64>, 'Breed1': <tf.Tensor 'ExpandDims_1:0' shape=(None, 1) dtype=string>, 'Gender': <tf.Tensor 'ExpandDims_6:0' shape=(None, 1) dtype=string>, 'Color1': <tf.Tensor 'ExpandDims_2:0' shape=(None, 1) dtype=string>, 'Color2': <tf.Tensor 'ExpandDims_3:0' shape=(None, 1) dtype=string>, 'MaturitySize': <tf.Tensor 'ExpandDims_8:0' shape=(None, 1) dtype=string>, 'FurLength': <tf.Tensor 'ExpandDims_5:0' shape=(None, 1) dtype=string>, 'Vaccinated': <tf.Tensor 'ExpandDims_12:0' shape=(None, 1) dtype=string>, 'Sterilized': <tf.Tensor 'ExpandDims_10:0' shape=(None, 1) dtype=string>, 'Health': <tf.Tensor 'ExpandDims_7:0' shape=(None, 1) dtype=string>, 'Fee': <tf.Tensor 'ExpandDims_4:0' shape=(None, 1) dtype=int64>, 'PhotoAmt': <tf.Tensor 'ExpandDims_9:0' shape=(None, 1) dtype=int64>}
Consider rewriting this model with the Functional API.
WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor, but we receive a <class 'dict'> input: {'Type': <tf.Tensor 'ExpandDims_11:0' shape=(None, 1) dtype=string>, 'Age': <tf.Tensor 'ExpandDims:0' shape=(None, 1) dtype=int64>, 'Breed1': <tf.Tensor 'ExpandDims_1:0' shape=(None, 1) dtype=string>, 'Gender': <tf.Tensor 'ExpandDims_6:0' shape=(None, 1) dtype=string>, 'Color1': <tf.Tensor 'ExpandDims_2:0' shape=(None, 1) dtype=string>, 'Color2': <tf.Tensor 'ExpandDims_3:0' shape=(None, 1) dtype=string>, 'MaturitySize': <tf.Tensor 'ExpandDims_8:0' shape=(None, 1) dtype=string>, 'FurLength': <tf.Tensor 'ExpandDims_5:0' shape=(None, 1) dtype=string>, 'Vaccinated': <tf.Tensor 'ExpandDims_12:0' shape=(None, 1) dtype=string>, 'Sterilized': <tf.Tensor 'ExpandDims_10:0' shape=(None, 1) dtype=string>, 'Health': <tf.Tensor 'ExpandDims_7:0' shape=(None, 1) dtype=string>, 'Fee': <tf.Tensor 'ExpandDims_4:0' shape=(None, 1) dtype=int64>, 'PhotoAmt': <tf.Tensor 'ExpandDims_9:0' shape=(None, 1) dtype=int64>}
Consider rewriting this model with the Functional API.
225/231 [============================>.] - ETA: 0s - loss: 0.6649 - accuracy: 0.6749WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor, but we receive a <class 'dict'> input: {'Type': <tf.Tensor 'ExpandDims_11:0' shape=(None, 1) dtype=string>, 'Age': <tf.Tensor 'ExpandDims:0' shape=(None, 1) dtype=int64>, 'Breed1': <tf.Tensor 'ExpandDims_1:0' shape=(None, 1) dtype=string>, 'Gender': <tf.Tensor 'ExpandDims_6:0' shape=(None, 1) dtype=string>, 'Color1': <tf.Tensor 'ExpandDims_2:0' shape=(None, 1) dtype=string>, 'Color2': <tf.Tensor 'ExpandDims_3:0' shape=(None, 1) dtype=string>, 'MaturitySize': <tf.Tensor 'ExpandDims_8:0' shape=(None, 1) dtype=string>, 'FurLength': <tf.Tensor 'ExpandDims_5:0' shape=(None, 1) dtype=string>, 'Vaccinated': <tf.Tensor 'ExpandDims_12:0' shape=(None, 1) dtype=string>, 'Sterilized': <tf.Tensor 'ExpandDims_10:0' shape=(None, 1) dtype=string>, 'Health': <tf.Tensor 'ExpandDims_7:0' shape=(None, 1) dtype=string>, 'Fee': <tf.Tensor 'ExpandDims_4:0' shape=(None, 1) dtype=int64>, 'PhotoAmt': <tf.Tensor 'ExpandDims_9:0' shape=(None, 1) dtype=int64>}
Consider rewriting this model with the Functional API.
231/231 [==============================] - 3s 11ms/step - loss: 0.6621 - accuracy: 0.6768 - val_loss: 0.5403 - val_accuracy: 0.6891
Epoch 2/10
231/231 [==============================] - 2s 8ms/step - loss: 0.5542 - accuracy: 0.7154 - val_loss: 0.5154 - val_accuracy: 0.7210
Epoch 3/10
231/231 [==============================] - 2s 8ms/step - loss: 0.5178 - accuracy: 0.7268 - val_loss: 0.4996 - val_accuracy: 0.7411
Epoch 4/10
231/231 [==============================] - 2s 8ms/step - loss: 0.5044 - accuracy: 0.7295 - val_loss: 0.4856 - val_accuracy: 0.7449
Epoch 5/10
231/231 [==============================] - 2s 7ms/step - loss: 0.4956 - accuracy: 0.7398 - val_loss: 0.4814 - val_accuracy: 0.7486
Epoch 6/10
231/231 [==============================] - 2s 8ms/step - loss: 0.4894 - accuracy: 0.7363 - val_loss: 0.4875 - val_accuracy: 0.7514
Epoch 7/10
231/231 [==============================] - 2s 7ms/step - loss: 0.4832 - accuracy: 0.7413 - val_loss: 0.4824 - val_accuracy: 0.7443
Epoch 8/10
231/231 [==============================] - 2s 7ms/step - loss: 0.4766 - accuracy: 0.7469 - val_loss: 0.4907 - val_accuracy: 0.7134
Epoch 9/10
231/231 [==============================] - 2s 8ms/step - loss: 0.4749 - accuracy: 0.7492 - val_loss: 0.4838 - val_accuracy: 0.7503
Epoch 10/10
231/231 [==============================] - 2s 7ms/step - loss: 0.4673 - accuracy: 0.7502 - val_loss: 0.4847 - val_accuracy: 0.7486

<tensorflow.python.keras.callbacks.History at 0x7f3b296a8e48>
loss, accuracy = model.evaluate(test_ds)
print("Accuracy", accuracy)
73/73 [==============================] - 0s 5ms/step - loss: 0.5179 - accuracy: 0.7413
Accuracy 0.7413344979286194

مراحل بعدی

بهترین راه برای کسب اطلاعات بیشتر در مورد طبقه بندی داده های ساختاریافته ، این است که خودتان امتحان کنید. ما پیشنهاد می کنیم یک مجموعه داده دیگر برای کار با آن پیدا کنیم و یک مدل را برای طبقه بندی آن با استفاده از کدی مشابه کد بالا آموزش دهیم. برای بهبود دقت ، به دقت فکر کنید که کدام ویژگی را در مدل خود بگنجانید ، و اینکه چگونه باید نمایش داده شود.