SRA 産業第1事業部 鈴木真吾
Google I/O 2019 について
Android関連のトピック
機械学習関連のトピック
その他
発表者について
Google I/O とは
Google I/O の内容
Google I/O に参加しよう
鈴木真吾(@giantneco)
所属: 産業第1事業部
言語: Go, C, Scala, etc
Google I/O
Google I/O 2016 に続いて 2 回目の参加
Google 開催の年次開発者向けイベント
毎年 5 月頃に開催
マウンテンビューの Google 本社近くで開催
メインは Android, Web など
アプリ開発者向け
Pixel 3a
Google Nest Hub
参加する場合は前後も余裕を持っていくのがオススメ
Android Q
名前の決定はまだ先
Kotlin ファースト
Jetpack など Kotlin 優先的に対応される
Jetpack Compose などは Kotlin 専用
Kotlin Everywhere の開催
新しい通知機能
notif.setBubbleMetaData(
new Notification.BubbleMetadata.Builder()
.setIcon(Icond.createWithAdaptiveBitmpa(bitmap))
.setDeiredHeight(600)
.setIntent(bubbleActivityIntent)
.build());
対応方法は 3 つ
WebView
テキスト
拡大鏡
非 SDK インターフェースの制限が更新
SDK で提供されていない API 呼び出しの制限
Pie から制限が開始
Q で制限のリストが更新
アクティビティの起動に制限
基本的にバックグラウンドからの起動は不可に
アクティビティは:
プロファイルがクラウドに
Generational Concurrent Copy GC
起動プロセスの変更
Q の Kotlin API では Nullable アノテーションがつけられる
kapt 1.3.30 からインクリメンタルなアノテーションプロセッシング
Jetpack のライブラリでコルーチンが使用可能になった
androidx.preference
CameraX
Architecture Components
Jetpack Compose
Jetpack Benchmark
android.preference
androidx.preference
カメラを簡単に扱えるようにするライブラリ
camera2API のラッパー
Google によりテストがされている
backward compatible
L+ に対応
workmanager 1.0.1 and 2.0.1
navigation 1.0 and 2.0
SaveState for ViewModel 1.0 alpha
benchmarking 1.0 alpha
Lifecycyels, LiveData, Room: コルーチン対応
ViewPager
ViewBindings + SavedState
Declarative UI
現在まだ α 前
リストが書ける程度
import androidx.compose.*
import androidx.ui.core.*
@Composable
fun Greeting(name: String) {
Text ("Hello $name!")
}
struct Content : View {
var body: some View {
VStack {
Text("Hello World")
}
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
body: new Center(
child: new Text('Hello World'),
),
),
);
}
}
etc...
強化学習用の TensorFlow ライブラリ
TPU で作ったスパコン
AutoML Vision Edge
Firebase 上で画像認識のモデル作成
ML Kit で利用可能に
ベータ1 が 2019/06 にリリース
tf.keras as the recommended high-level api
= Define by Run
強化学習、RNN、自然言語処理などに有利
従来の Defined and Run (graph mode) も併用可能
import tensorflow as tf
a = tf.Variable(0, name='counter')
with tf.control_dependencies([tf.assign_add(a, 1)]):
b = tf.case({
tf.equal(tf.mod(a, 15), 0): lambda: tf.constant("FizzBuzz"),
tf.equal(tf.mod(a, 3), 0): lambda: tf.constant("Fizz"),
tf.equal(tf.mod(a, 5), 0): lambda: tf.constant("Buzz"),
}, default=lambda: tf.as_string(a))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(100):
print(sess.run(b).decode())
import tensorflow as tf
def fizzbuzz(max_num):
counter = tf.constant(0)
max_num = tf.convert_to_tensor(max_num)
for num in range(1, max_num.numpy()+1):
num = tf.constant(num)
if int(num % 3) == 0 and int(num % 5) == 0:
print('FizzBuzz')
elif int(num % 3) == 0:
print('Fizz')
elif int(num % 5) == 0:
print('Buzz')
else:
print(num.numpy())
counter += 1
これまでの書き方
model = tf.keras.models.Sqeuential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
class MyModel(tf.keras.Modle):
def __init__(self, num_classes=10):
super(MyModel, self).__init__(name='my_model')
self.dense_1 = layers.Dense(32, activation='relu')
self.dense_2 = laysers.Dense(num_classes, activation='sigmoid')
def call(self, inputs):
# Define your faorward pass here
x = self.dense_1(inputs)
return self.dense_2(x)
New
非中央集権型データを扱う Map Reduce
データセンター内の Map Reduce に比べて:
?℃
31℃
28℃
26℃
34℃
?℃
31℃
28℃
26℃
34℃
> 30℃?
?℃
31℃
28℃
26℃
34℃
> 30℃?
1
0
1
31℃
利点:
TensorFlow Federated API:
TensorFlow Federated Core:
+シミュレーション用の API
ここでの「fairness」はジェンダー、アイデンティティetc
データ自体が偏りを持つ恐れがある
教訓:
観測したデータは、違う文脈では意図していない意味を持っているかもしれない
教訓:
早めにテスト・頻繁にテストする
複数のメトリクスを用意
プロダクトが持つべき制約を意識してモデリングする
プロダクトのデザインによって公平性を損ねる場合がある
対策:
文脈次第で意味が変わる場合がある
多様な背景を持ったユーザからフィードバックを受ける
多様なユーザに合わせた体験を提供する
TensorFlow-base の汎用かつスケーラブルな
機械学習プラットフォーム
引用:TFX: A TensorFlow-Based Production-Scale Machine Learning Platform
def _create_pipeline():
examples = csv_input(...)
example_gen = CsvExampleGen(input_base=examples)
statistics_gen = StatisticsGen(...)
infer_schema = SchemaGen(...)
validate_stats = ExampleValidator(...)
transform = Transform(...)
trainer = Trainer(...)
model_analyzer = Evaluator(..)
model_validator = ModelValidator(...)
pusher = Pusher(...)
return pipeline.Pipeline(
pipeline_name='simple',
components=[
example_gen, statistics_gen, infer_schema, validate_stats, transform,
trainer, model_analyzer, model_validator, pusher
], ...
)
airflow_pipeline = AirflowDAGRunner(_airflow_config).run(_create_pipeline())
$ flutter pub global activate webdev # install webdev
$ flutter pub upgrade # upgrade packages
:
$ flutter packages pub global run webdev serve
import 'package:flutter_web/material.dart';
void main() {
runApp(new Text('Hello World', textDirection: TextDirection.ltr));
}
プラグインの追加と実行
Hello World
int? number = int.tryParse('not int');
print(number.isEven);
Dart 言語仕様は github で管理される
String String.double() => this + this;
Kotlin かな?
2019/05 以降発売の全ての Chromebook で Linux 対応
Pixel などでは既にできていた
2クリックでセットアップ
apt-get が使用可能