![]() | ![]() | ![]() | ![]() |
بررسی اجمالی
این آموزش نحوه ایجادtf.data.Dataset
از سرور پایگاه داده PostgreSQL نشان می دهد تا Dataset
ایجاد شده برای اهداف آموزشی یا استنباط به tf.keras
منتقل شود.
پایگاه داده SQL منبع مهمی از داده ها برای دانشمند داده است. PostgreSQL به عنوان یکی از محبوب ترین پایگاه های منبع باز SQL ، به طور گسترده در شرکت ها برای ذخیره سازی داده های مهم و معاملاتی در سراسر کشور مورد استفاده قرار می گیرد. ایجاد Dataset
از سرور پایگاه داده PostgreSQL به طور مستقیم و انتقال Dataset
به tf.keras
برای آموزش یا استنتاج ، می تواند خط لوله داده را بسیار ساده کرده و دانشمند داده را در تمرکز بر ساخت مدل های یادگیری ماشین کمک کند.
راه اندازی و استفاده
بسته های مورد نیاز tensorflow-io را نصب کنید و زمان اجرا را دوباره راه اندازی کنید
try:
%tensorflow_version 2.x
except Exception:
pass
!pip install -q tensorflow-io
PostgreSQL را نصب و راه اندازی کنید (اختیاری)
به منظور نمایش آزمایشی استفاده در Google Colab ، سرور PostgreSQL را نصب خواهید کرد. رمز عبور و یک پایگاه داده خالی نیز مورد نیاز است.
اگر این نوت بوک را در Google Colab اجرا نمی کنید یا ترجیح می دهید از یک پایگاه داده موجود استفاده کنید ، لطفاً از تنظیمات زیر صرف نظر کرده و به بخش بعدی بروید.
# Install postgresql server
sudo apt-get -y -qq update
sudo apt-get -y -qq install postgresql
sudo service postgresql start
# Setup a password `postgres` for username `postgres`
sudo -u postgres psql -U postgres -c "ALTER USER postgres PASSWORD 'postgres';"
# Setup a database with name `tfio_demo` to be used
sudo -u postgres psql -U postgres -c 'DROP DATABASE IF EXISTS tfio_demo;'
sudo -u postgres psql -U postgres -c 'CREATE DATABASE tfio_demo;'
Preconfiguring packages ... Selecting previously unselected package libpq5:amd64. (Reading database ... 254633 files and directories currently installed.) Preparing to unpack .../0-libpq5_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking libpq5:amd64 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package postgresql-client-common. Preparing to unpack .../1-postgresql-client-common_190ubuntu0.1_all.deb ... Unpacking postgresql-client-common (190ubuntu0.1) ... Selecting previously unselected package postgresql-client-10. Preparing to unpack .../2-postgresql-client-10_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking postgresql-client-10 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package ssl-cert. Preparing to unpack .../3-ssl-cert_1.0.39_all.deb ... Unpacking ssl-cert (1.0.39) ... Selecting previously unselected package postgresql-common. Preparing to unpack .../4-postgresql-common_190ubuntu0.1_all.deb ... Adding 'diversion of /usr/bin/pg_config to /usr/bin/pg_config.libpq-dev by postgresql-common' Unpacking postgresql-common (190ubuntu0.1) ... Selecting previously unselected package postgresql-10. Preparing to unpack .../5-postgresql-10_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking postgresql-10 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package postgresql. Preparing to unpack .../6-postgresql_10+190ubuntu0.1_all.deb ... Unpacking postgresql (10+190ubuntu0.1) ... Selecting previously unselected package sysstat. Preparing to unpack .../7-sysstat_11.6.1-1ubuntu0.1_amd64.deb ... Unpacking sysstat (11.6.1-1ubuntu0.1) ... Setting up sysstat (11.6.1-1ubuntu0.1) ... Creating config file /etc/default/sysstat with new version update-alternatives: using /usr/bin/sar.sysstat to provide /usr/bin/sar (sar) in auto mode Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service → /lib/systemd/system/sysstat.service. Setting up ssl-cert (1.0.39) ... Setting up libpq5:amd64 (10.15-0ubuntu0.18.04.1) ... Setting up postgresql-client-common (190ubuntu0.1) ... Setting up postgresql-common (190ubuntu0.1) ... Adding user postgres to group ssl-cert Creating config file /etc/postgresql-common/createcluster.conf with new version Building PostgreSQL dictionaries from installed myspell/hunspell packages... Removing obsolete dictionary files: Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /lib/systemd/system/postgresql.service. Setting up postgresql-client-10 (10.15-0ubuntu0.18.04.1) ... update-alternatives: using /usr/share/postgresql/10/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-10 (10.15-0ubuntu0.18.04.1) ... Creating new PostgreSQL cluster 10/main ... /usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "C.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/10/main ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default timezone ... Etc/UTC selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok Success. You can now start the database server using: /usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l logfile start Ver Cluster Port Status Owner Data directory Log file 10 main 5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log update-alternatives: using /usr/share/postgresql/10/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode Setting up postgresql (10+190ubuntu0.1) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for ureadahead (0.100.0-21) ... Processing triggers for libc-bin (2.27-3ubuntu1.2) ... Processing triggers for systemd (237-3ubuntu10.38) ... ALTER ROLE NOTICE: database "tfio_demo" does not exist, skipping DROP DATABASE CREATE DATABASE
متغیرهای محیطی لازم را تنظیم کنید
متغیرهای محیطی زیر براساس تنظیمات PostgreSQL در بخش آخر است. اگر تنظیم دیگری دارید یا از پایگاه داده موجود استفاده می کنید ، باید متناسب با آنها تغییر یابد:
%env TFIO_DEMO_DATABASE_NAME=tfio_demo
%env TFIO_DEMO_DATABASE_HOST=localhost
%env TFIO_DEMO_DATABASE_PORT=5432
%env TFIO_DEMO_DATABASE_USER=postgres
%env TFIO_DEMO_DATABASE_PASS=postgres
env: TFIO_DEMO_DATABASE_NAME=tfio_demo env: TFIO_DEMO_DATABASE_HOST=localhost env: TFIO_DEMO_DATABASE_PORT=5432 env: TFIO_DEMO_DATABASE_USER=postgres env: TFIO_DEMO_DATABASE_PASS=postgres
داده ها را در سرور PostgreSQL آماده کنید
برای اهداف آزمایشی ، این آموزش یک پایگاه داده ایجاد می کند و پایگاه داده را با برخی داده ها پر می کند. داده های استفاده شده در این آموزش از مجموعه داده های کیفیت هوا است که از مخزن یادگیری ماشین UCI در دسترس است.
در زیر پیش نمایش سریعی از زیر مجموعه مجموعه داده های کیفیت هوا وجود دارد:
تاریخ | زمان | CO (GT) | PT08.S1 (CO) | NMHC (GT) | C6H6 (GT) | PT08.S2 (NMHC) | NOx (GT) | PT08.S3 (NOx) | NO2 (GT) | PT08.S4 (NO2) | PT08.S5 (O3) | T | RH | AH | ---- | ---- | ------ | ----------- | -------- | -------- | --- ---------- | ---- | ---------- | ------- | ------------ | - - --------- | - | - | - | 10/03/2004 | 18.00.00 | 2،6 | 1360 | 150 | 11،9 | 1046 | 166 | 1056 | 113 | 1692 | 1268 | 13،6 | 48،9 | 0،7578 | 10/03/2004 | 19.00.00 | 2 | 1292 | 112 | 9،4 | 955 | 103 | 1174 | 92 | 1559 | 972 | 13،3 | 47،7 | 0،7255 | 10/03/2004 | 20.00.00 | 2،2 | 1402 | 88 | 9،0 | 939 | 131 | 1140 | 114 | 1555 | 1074 | 11،9 | 54،0 | 0،7502 | 10/03/2004 | 21.00.00 | 2،2 | 1376 | 80 | 9،2 | 948 | 172 | 1092 | 122 | 1584 | 1203 | 11،0 | 60،0 | 0،7867 | 10/03/2004 | 22.00.00 | 1،6 | 1272 | 51 | 6،5 | 836 | 131 | 1205 | 116 | 1490 | 1110 | 11،2 | 59،6 | 0،7888 |
اطلاعات بیشتر در مورد مجموعه داده های کیفیت هوا و مخزن یادگیری ماشین UCI در بخش منابع موجود است.
برای کمک به ساده سازی آماده سازی داده ها ، نسخه sql مجموعه داده کیفیت هوا تهیه شده است و به عنوان AirQualityUCI.sql در دسترس است.
عبارت ایجاد جدول عبارت است از:
CREATE TABLE AirQualityUCI (
Date DATE,
Time TIME,
CO REAL,
PT08S1 INT,
NMHC REAL,
C6H6 REAL,
PT08S2 INT,
NOx REAL,
PT08S3 INT,
NO2 REAL,
PT08S4 INT,
PT08S5 INT,
T REAL,
RH REAL,
AH REAL
);
دستورات کامل برای ایجاد جدول در پایگاه داده و جمع آوری داده ها عبارتند از:
curl -s -OL https://github.com/tensorflow/io/raw/master/docs/tutorials/postgresql/AirQualityUCI.sql
PGPASSWORD=$TFIO_DEMO_DATABASE_PASS psql -q -h $TFIO_DEMO_DATABASE_HOST -p $TFIO_DEMO_DATABASE_PORT -U $TFIO_DEMO_DATABASE_USER -d $TFIO_DEMO_DATABASE_NAME -f AirQualityUCI.sql
Dataset را از سرور PostgreSQL ایجاد کنید و از آن در TensorFlow استفاده کنید
ایجاد یک Dataset از سرور PostgreSQL به آسانی فراخوانی tfio.experimental.IODataset.from_sql
با استدلال query
و query
و endpoint
است. query
است از پرس و جو SQL برای انتخاب ستون ها در جداول و آرگومان endpoint
آدرس و نام پایگاه داده است:
import os
import tensorflow_io as tfio
endpoint="postgresql://{}:{}@{}?port={}&dbname={}".format(
os.environ['TFIO_DEMO_DATABASE_USER'],
os.environ['TFIO_DEMO_DATABASE_PASS'],
os.environ['TFIO_DEMO_DATABASE_HOST'],
os.environ['TFIO_DEMO_DATABASE_PORT'],
os.environ['TFIO_DEMO_DATABASE_NAME'],
)
dataset = tfio.experimental.IODataset.from_sql(
query="SELECT co, pt08s1 FROM AirQualityUCI;",
endpoint=endpoint)
print(dataset.element_spec)
{'co': TensorSpec(shape=(), dtype=tf.float32, name=None), 'pt08s1': TensorSpec(shape=(), dtype=tf.int32, name=None)}
همانطور که از خروجی Dataset
. dataset.element_spec
بالا مشاهده کردید ، عنصر Dataset
ایجاد شده یک شی dict python با نام ستون های جدول پایگاه داده به عنوان کلید است. استفاده از عملیات بعدی کاملاً راحت است. به عنوان مثال ، می توانید قسمت nox
و no2
Dataset
و تفاوت را محاسبه کنید:
dataset = tfio.experimental.IODataset.from_sql(
query="SELECT nox, no2 FROM AirQualityUCI;",
endpoint=endpoint)
dataset = dataset.map(lambda e: (e['nox'] - e['no2']))
# check only the first 20 record
dataset = dataset.take(20)
print("NOx - NO2:")
for difference in dataset:
print(difference.numpy())
NOx - NO2: 53.0 11.0 17.0 50.0 15.0 -7.0 -15.0 -14.0 -15.0 0.0 -13.0 -12.0 -14.0 16.0 62.0 28.0 14.0 3.0 9.0 34.0
Dataset
ایجاد شده برای انتقال به tf.keras
مستقیماً یا به منظور آموزش یا استنباط آماده است.
منابع
- Dua، D. and Graff، C. (2019). مخزن یادگیری ماشین UCI [ http://archive.ics.uci.edu/ml ]. ایروین ، کالیفرنیا: دانشگاه کالیفرنیا ، دانشکده اطلاعات و علوم کامپیوتر.
- S. De Vito ، E. Massera ، M. Piga ، L. Martinotto ، G. Di Francia ، در مورد کالیبراسیون میانی بینی الکترونیکی برای تخمین بنزن در سناریوی نظارت بر آلودگی شهری ، حسگرها و محرک های B: شیمی ، جلد 129 ، شماره 2 ، 22 فوریه 2008 ، صفحات 750-757 ، ISSN 0925-4005