日々精進

新しく学んだことを書き留めていきます

ブラウザで洋書を楽に読む方法

O'Reilly MediaのSubscriptionServiceに長年入っているが、このサービスはブラウザで洋書の技術書が読めるので、最近Google翻訳を使うとすごく楽に読めることに気付いた。

www.oreilly.com

以下のChrome拡張を入れて、拡張機能のアイコンをクリック>このページを翻訳 をクリックするとページ全体が翻訳される。さらに翻訳された文章にマウスオーバーすると原文が表示される。意味がよくわからないところがあってもすぐ原文を見られるのはいい。 chrome.google.com

拡張機能入れなくてもWebページを右クリック>日本語に翻訳 でページ全体の翻訳はできるが、原文を見たい時にページ全体を翻訳前に戻さないといけないのでちょっと面倒。 これで洋書の読書が捗る・・!

IAMロールを設定できるようにする方法

IAMグループにDeveloperグループを作り、PowerUserAccessポリシーをアタッチして使っていたが これだけではIAMロールをEC2インスタンスに設定できなかった。(IAMロールを設定する箇所でアクセス許可がないというエラーメッセージが出る) 以下の公式ドキュメントに書いてある通りにIAMポリシーを作り、Developerグループに適用したがやはりだめ。。

docs.aws.amazon.com

以下の設定でいけると書いてるんだけどなぁ。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances",
         "ec2:AssociateIamInstanceProfile",
         "ec2:ReplaceIamInstanceProfileAssociation"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "*"
    }
  ]
}

結局以下の権限を追加するといけた。ドキュメントが古いのか?

"iam:ListInstanceProfiles",
"iam:AddRoleToInstanceProfile",

Pythonでディレクトリを丸ごとS3にアップロードする

boto3にディレクトリをアップロードする機能はないのでaws cliでやらないといけない。

os.system(f"aws s3 cp ./home/ec2-user/dirname s3://bucket/dirname --recursive") のような感じでrecursiveオプションをつければいいのだが リモート側もまるっとコピーするディレクトリ名を指定しないといけない。

大分前からディレクトリアップロードのIssueはあるんだけどなぁ。。 github.com

KerasでもDatasetAPIを使って効率的にtrain/validationデータを読み込む方法

TFRecordファイルを読み込んでfitメソッドに渡そうと思ったんだけど、これがなかなか情報がなく苦労した。。 TFRecordを読み込んでfitメソッドに渡すところは以下のGistを参考にしてできた。 Training Keras model with tf.data · GitHub

InputLayerやcompileメソッドにtrainやvalidation用のtensorを渡すコードを公開してる人が多いけど、 最近バージョンではfitメソッドにiteratorを渡せばいいっぽい。 その際iteratorはタプルを返すようにし、0番目が画像データ、1番目がラベルデータになるようにすればOK。

TFRecordファイルを作成するところについては以下を参考にすれば書けると思う。

blog.ml6.eu

色々検索して探し回ったけど、公式ドキュメントが一番しっかり書かれてるし最新の情報なのでまずはこれを参考にするのがおすすめ。

www.tensorflow.org

TensorFlowのTFRecordファイルの中身を確認する方法

作成したTFRecordが想定通りのフォーマットで作られているかを確認したい場合。 tf.data.TFRecordDataset([filepath]) で読み込むと、多分データが必要になるまで読み込まないようになるのでデータを確認出来ず困る(tf.Session()でSessionを開始してsess.runすればいいのかも知れないけど。。) 以下のようにするとJSON形式の文字列として出力させられるので簡単に中身を確認出来る。

    record_iterator = tf.python_io.tf_record_iterator(path="train.tfrecord")
    for string_record in record_iterator:
        example = tf.train.Example()
        example.ParseFromString(string_record)
        print(example)

参考:

www.tensorflow.org